我有一个结构数组。每个结构如下。
struct thread_st
{
pthread_t thr;
int conn;
pthread_mutex_t mutex;
pthread_cond_t cond;
};
conn 指示线程是否有工作要做。如果它> = 0,它表示一个任务,如果它是-1,它表示等待。如果它读取-1,它会在继续之前使用以下循环等待广播我已经删除了一些错误处理,因此其他等将块缩小到需要
while (str->conn == -1) {
else {
if (pthread_cond_wait(&str->cond,&str->mutex)) {
if (pthread_mutex_unlock(&str->mutex)) { }
return NULL;
}
printf("here b3\n");
}
}
现在,我的问题是,当 cond 变量被广播时 pthread_cond_broadcast(&thr->cond) ,其中 thr 是 thread_st 类型,所有线程都打印“here b3”语句。为了理智起见,我已经使用 The thread_st array is created here 进行了测试(再次删除了错误处理)
struct thread_st pool[TP_SIZE];
for (i = 0; i < TP_SIZE; i++) {
pool[i].conn = -1;
if (pthread_mutex_init(&pool[i].mutex,NULL)) { }
if (pthread_cond_init(&pool[i].cond,NULL)) { }
if (pthread_create(&(pool[i].thr), NULL,worker_thr_routine, pool)) { }
}
有任何想法吗?这是我第一次真正尝试使用 cond 和 mutex 变量,所以如果我很愚蠢,请告诉!
谢谢
更新 线程仅响应位于数组中第一个结构中的条件变量的广播。
更新 2 找到了。原来我是个白痴。在我调用 pthread create 的地方,我通过了整个池。我只是想通过 pool[i]