gpt4 book ai didi

c - 重复使用具有相同编号 pthread 的线程

转载 作者:行者123 更新时间:2023-11-30 15:36:51 27 4
gpt4 key购买 nike

如果线程已经终止,是否允许重复使用具有相同线程号的线程?

我编写了一小段代码,如果线程不再繁忙并且已终止,它将重新使用线程号。这是代码。它有效,但我想知道我所做的事情是否被允许?

它打印出线程 ID、主循环的当前位置和函数循环的当前位置。

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>

#define NUM_THREADS 8
#define NUM_LOOP 17

typedef struct infos {
int mainloop;
int thread_id;
int *busy;
} infos;


void *printtest(void *arg){

int i,sleep;
infos *infostruct=(infos*)(arg);

for (i=0;i<5;i++) {
sleep=rand()%1000000;
printf("thead_id %2i | main %2i | loop: %2i\n",infostruct->thread_id,infostruct->mainloop,i);
usleep( sleep );
}

*infostruct->busy=0;

pthread_exit(0);

}


int main () {

pthread_t threads[NUM_THREADS];
infos infostruct[NUM_LOOP];

int thread_busy[NUM_THREADS]={0},
thread_found,
i,j;

for(i=0;i<NUM_LOOP;i++) {
thread_found=0;

while (thread_found!=1) {

for (j=0;j<NUM_THREADS;j++) {
/* if non-busy thread is found use its number to create a new thread with that number, link the busy variable with the thread_busy array index of the thread.*/
if (thread_busy[j]==0) {

thread_busy[j]=1;
infostruct[i].thread_id=j;
infostruct[i].mainloop=i;
infostruct[i].busy=&thread_busy[j];

if (pthread_create(&threads[j], NULL, printtest, &infostruct[i])) {
printf("ERROR creating thread");
}

pthread_detach(threads[j]);
thread_found=1;

break;

}
}
}
}

for (i=0;i<NUM_THREADS;i++) {
while (thread_busy[i]!=0);
}

printf("\n!!DONE!!\n");

}

最佳答案

在此代码中,“线程号”完全是您自己的构造,因此您可以决定如何使用它的规则。

关于c - 重复使用具有相同编号 pthread 的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22428082/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com