【发布时间】:2010-12-11 01:19:52
【问题描述】:
我在线程 A 中有以下代码,它使用 pthread_cond_wait() 阻塞
pthread_mutex_lock(&my_lock);
if ( false == testCondition )
pthread_cond_wait(&my_wait,&my_lock);
pthread_mutex_unlock(&my_lock);
我在线程 B 中有以下代码,它向线程 A 发出信号
pthread_mutex_lock(&my_lock);
testCondition = true;
pthread_cond_signal(&my_wait);
pthread_mutex_unlock(&my_lock);
如果没有其他线程,如果将pthread_cond_signal(&my_wait) 移出临界区块,如下所示会有什么不同吗?
pthread_mutex_lock(&my_lock);
testCondition = true;
pthread_mutex_unlock(&my_lock);
pthread_cond_signal(&my_wait);
【问题讨论】:
-
虚假唤醒是
pthread_cond_wait规范的一部分。如果没有其他线程发出信号,它可能会返回。永远不要在if中调用pthread_cond_wait,总是在while循环中。
标签: pthreads mutex signals critical-section