检查线程是否未使用C.

时间:2014-01-27 19:52:22

标签: c multithreading

我正在尝试检查数组中的线程是否未使用,然后返回未使用的数组空间

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]);

2 个答案:

答案 0 :(得分:2)

您无法仅通过将pthread_t与常量进行比较来跟踪pthread_t是否被使用。 typedef struct { bool avaiable; pthread_t thread; } threadrec_t; 数据类型的内容有意不向程序员公开。

考虑将您的数组声明为以下结构的数组:

threadrec_t.avaiable

使用true字段来确定线程是否正在使用中。在使用时,您必须记住将其值设置为false,并在作业完成时将其设置为{{1}}。

看看这个相关的问题:

How do you query a pthread to see if it is still running?

答案 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数组。