我有以下代碼爲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