-1
好的,下面的代碼中至少有兩個應該糾正的主要問題。互斥鎖中的條件變量錯誤
#define COUNT_LIMIT 12
pthread_mutex_t c_mutex;
pthread_cond_t cond_cv;
int count=0;
void *inc_count(void *param)
{
int i=0;
for (i=0;i<14;i++) {
count++;
if (count==COUNT_LIMIT)
pthread_cond_signal(&cond_cv);
}
}
void *watch_count(void *param)
{
pthread_mutex_lock(&c_mutex);
while (count<COUNT_LIMIT) {
pthread_cond_wait(&cond_cv, &c_mutex);
printf("watch_count(): signal received.\n");
}
pthread_mutex_unlock(&c_mutex);
pthread_exit(NULL);
}
,我發現是在while循環的WATCH_COUNT部()函數的第一個問題,邏輯有錯誤的,因爲當計數爲12時,它也不會小於COUNT_LIMIT。因此,要解決這個問題我想將其更改爲
while(count <= COUNT_LIMIT)
請問另一件事是信號WATCH_COUNT部後解鎖互斥()?
否則,我找不到任何其他錯誤的東西。我的活動嘗試閱讀this,但我很難理解它。
'while'條件很好,因爲它是。 「當計數爲12時,不會小於COUNT_LIMIT」。這正是想要的。它應該保持循環,直到計數達到12爲止。您的更改不是必需的。 – kaylum
我不認爲你的問題帶有*理想行爲的合理描述*? – WhozCraig