我有以下代码为count = 0的N个线程运行最初作为共享变量。在线程工作之前,每个变量都被初始化。我正在尝试仅执行最大线程数的代码的关键部分。pthread_cond_signal块线程
void *tmain(){
while(1){
pthread_mutex_lock(&count_mutex);
count++;
if(count>MAX){
pthread_cond_wait(&count_threshold_cv, &count_mutex);
}
pthread_mutex_unlock(&count_mutex);
/*
some code not associated with count_mutex or count_threshold_cv
*/
pthread_mutex_lock(&count_mutex);
count--;
pthread_cond_signal(&count_threshold_cv);
pthread_mutex_unlock(&count_mutex);
}
}
但运行一段时间后,线程在pthread_cond_signal()处被阻塞。我无法理解为什么会出现这种情况。任何帮助表示赞赏。
调用'pthread_cond_signal'不会在健康程序中死锁。您应该验证您正在操作的条件变量是否仍然存在并且未被损坏。另外,使用调试器来验证死锁时不同线程的确切位置,以及它们在那个时刻保持的锁定位置。 – ComicSansMS
显示的代码看起来不错。如果不起作用,问题就出在其他地方。 Btw:如果将'tmain()'作为线程函数传递给'pthread_create()',则应声明为:void * tmain(void *)'。 – alk
我加了[C]标签。如果你正在做[C++],请纠正这一点。 – alk