消费者线程(多个):
// *错误做法* lock(my_lock){ if(wait = 1){ pthread_cond_wait(cond, my_lock); } wait = 1; }
生产者线程:
lock(my_lock){ wait = 0; pthread_cond_signal(cond); }
由于在 if(wait=1) 之后和 pthread_cond_wait() 在之前, wait 有可能已经被其它消费者线程更改了.
所以, 必须把 pthread_cond_wait() 放在循环中:
// 正确做法 lock(my_lock){ while(wait = 1){ pthread_cond_wait(cond, my_lock); } wait = 1; }