为什么条件变量要搭配互斥锁使用
网上流行的说法:
条件变量配合着互斥量使用,是为了解决 在线程A中调用了 pthread_cond_wait,但是线程A还没有进入wait cond的时候,线程B调用了pthread_cond_signal,如果不用mutex,这个cond_signal就丢失了,而如果加上了锁,则线程B必须要等到mutex被释放了的时候才能调用pthread_cond_signal。
其实简单写一下代码就比较清楚了
// thread A
while(condition) {
wait();
}
// thread B
signal();
当线程A进入while内的时候但还没用wait的时候,线程B调用signal,如果不用mutex,这个cond_signal就丢失了,而如果加上了锁,则线程B必须要等到mutex被释放了的时候才能调用pthread_cond_signal。
所以本身就处于临界区,所以需要用mutex来保护。(此描述待定)
正常的用法
pthread_mutex_lock(&mutex);
while(condition) {
pthread_cond_wait(&cond, &mutex);
}
pthread_mutex_unlock(&mutex);
// thread B
pthread_mutex_lock(&mutex);
signal();
pthread_mutex_unlock(&mutex);
