我正在尝试检查数组中的线程是否未使用,然后返回未使用的数组空间
int Check(){
int a;
for (a=0;a<12;a++){
if(tid[a]==0){
return a;
}
}
return -1;
tid是一个全局变量
pthread_t tid[12];
我总是得到-1返回,我不知道如何检查线程是否被使用。
我不知道未使用的pthread_t等于什么。
这就是我正在初始化数组的方式:
user[i] = (struct users){i,0,count};
pthread_create(&tid[count], NULL, (void*)Actions, &user[i]);
答案 0 :(得分:2)
您无法仅通过将pthread_t
与常量进行比较来跟踪pthread_t
是否被使用。 typedef struct {
bool avaiable;
pthread_t thread;
} threadrec_t;
数据类型的内容有意不向程序员公开。
考虑将您的数组声明为以下结构的数组:
threadrec_t.avaiable
使用true
字段来确定线程是否正在使用中。在使用时,您必须记住将其值设置为false
,并在作业完成时将其设置为{{1}}。
看看这个相关的问题:
答案 1 :(得分:1)
建议:
在主线程中,调用pthread_self
并在某处捕获返回值;也许是一个全局变量。
当主线程处于活动状态时,任何其他线程的ID不能等于主线程的ID;所以你可以使用这个主线程ID作为特殊值来表示“这里没有线程”。
/* ... */
no_thread = pthread_self(); /* in main */
/* ... */
if (pthread_create(&tid[i], ...)) {
/* failed */
tid[i] = no_thread;
}
/* ... */
if (pthread_equal(tid[i], no_thread)) {
/* no thread at index i */
}
另一种方法是使用并列数组tid_valid[]
布尔值,表明存在相应tid
值的有效性。或者像这样的结构:
struct thread_info {
pthread_t id;
int valid;
};
并制作这些结构的tid
数组。