為什么在互斥量的基礎上還需要加條件變量?
可參考鏈接:https://www.jianshu.com/p/01ad36b91d39
需要注意的是
#include <pthread.h>
int pthread_cond_wait(pthread_cond_t *cv, pthread_mutex_t *mutex);
返回值:函數成功返回0;任何其他返回值都表示錯誤
函數將解鎖mutex參數指向的互斥鎖,並使當前線程阻塞在cv參數指向的條件變量上。
被阻塞的線程可以被pthread_cond_signal函數,pthread_cond_broadcast函數喚醒,也可能在被信號中斷后被喚醒。
pthread_cond_wait函數的返回並不意味着條件的值一定發生了變化,必須重新檢查條件的值。
pthread_cond_wait函數返回時,相應的互斥鎖將被當前線程鎖定,即使是函數出錯返回。 即無論返回結果如何都會重新對互斥量加鎖
為什么要與pthread_mutex 一起使用呢?
答:在thread 1 call pthread_cond_wait() 的時刻到 thread 1真正進入 wait 狀態時,是存在着時間差的。如果在這段時間差內 thread2 調用了 pthread_cond_signal() 那這個 signal 信號就丟失了。給 wait 加鎖可以防止同時有另一個線程在 signal。
為了應對 線程1在調用pthread_cond_wait()但線程1還沒有進入wait cond的狀態的時候,此時線程2調用了 cond_singal 的情況。 如果不用mutex鎖的話,這個cond_singal就丟失了。加了鎖的情況是,線程2必須等到 mutex 被釋放(也就是 pthread_cod_wait() 釋放鎖並進入wait_cond狀態 ,此時線程2上鎖) 的時候才能調用cond_singal.