0
我正在編碼以模擬售票情況:
兩個線程一個接一個地出售一些門票,一個線程在門票數爲0時顯示sold out
所以我嘗試使用一個條件變量。下面是代碼:
爲什麼pthread條件變量不起作用
int a = 10;
pthread_mutex_t mtx;
pthread_cond_t cond;
void * funca(void *p)
{
while(1)
{
pthread_mutex_lock(&mtx);
if (a == 0)
{
break;
}
a--;
pthread_mutex_unlock(&mtx);
sleep(1);
}
pthread_mutex_unlock(&mtx);
pthread_cond_broadcast(&cond);
return NULL;
}
void * funcb(void *p)
{
while(1)
{
pthread_mutex_lock(&mtx);
if (a == 0)
{
break;
}
a--;
pthread_mutex_unlock(&mtx);
sleep(1);
}
pthread_mutex_unlock(&mtx);
pthread_cond_broadcast(&cond);
return NULL;
}
void * funcc(void *p)
{
pthread_mutex_lock(&mtx);
while(a != 0)
{
pthread_cond_wait(&cond, &mtx);
printf("I'm nothing");
}
pthread_mutex_unlock(&mtx);
printf("sold out\n");
return NULL;
}
然而,當我執行上面的代碼,我得到了許多I'm nothing
一個無限循環打印。
您尚未初始化您的互斥鎖和條件變量。當你聲明變量時,使用'pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;'和'pthread_cond_t cond = PTHREAD_COND_INITIALIZER;'。 (對於'funca()'和'funcb()'也沒有兩個相同的函數,你可以讓兩個不同的線程執行相同的函數)。 – caf
@caf你能寫一個我能接受的答案嗎? – Yves