下一個代碼通常打印BA,但有時它可以打印BBAA,BAAB,... ...這怎麼可能得到兩個A或B吧?但是,這段代碼從不打印三個A或B.這兩個函數(生產和消費)都運行很多線程。提前謝謝了。奇線程行爲
int permission;
void set_permission(int v) {
permission = v;
printf("%c", v + 'A');fflush(stdin);
}
void* produce(void*) {
for (;;) {
pthread_mutex_lock(&mr1);
set_permission(1);
while (permission == 1);
pthread_mutex_unlock(&mr1);
}
}
void* consume(void*) {
for (;;) {
pthread_mutex_lock(&mr2);
while (permission == 0);
set_permission(0);
pthread_mutex_unlock(&mr2);
}
}
'fflush(標準輸入);'導致udnefined行爲;不要做 –
我看到2個不相關的互斥體。看起來您可以刪除同步過程並獲得相同的結果。 –
關於兩個不同的互斥體的引用是什麼?如果代碼試圖保護變量'permission',那麼所有的互斥量引用應該是同一個互斥量。建議:for(;;){while(!permission);的pthread_mutex_lock(&mr1); set_permission(1);調用pthread_mutex_unlock(&mr1);}'消費者線程看起來非常相似,並且將使用相同的互斥 – user3629249