想象一个线程阻塞在条件变量上:
pthread_mutex_lock (mutex);
do_something ();
pthread_cond_wait(cond, mutex); // [1]
do_something_else ();
pthread_mutex_unlock (mutex);
互斥锁被解锁,另一个试图锁定互斥锁的线程被解锁:
pthread_mutex_lock (mutex);
do_some_work ();
pthread_cond_signal (cond);
pthread_mutex_unlock (mutex);
同时还有另一个线程等待获取临界区的所有权:
pthread_mutex_lock (mutex); // [2]
do_some_random_work ();
pthread_mutex_unlock (mutex);
现在,问题是:当调用 pthread_cond_signal() 时,是否保证 pthread_cond_wait() [1] 会在 pthread_mutex_lock() [2] 之前解除阻塞?
POSIX 规范似乎对此案只字未提。