本文简单介绍了一些 虚假唤醒(spurious wakeup) 相关的知识
(注: 本文假设读者对多线程开发有一定了解)
高层次的多线程编程中,条件变量是个常见的同步方法,跟传统仅使用互斥量的方法相比...上述示例代码中,我们在设置 g_signaled 之后调用了 pthread_cond_signal,正常来讲的话,之前调用 pthread_cond_wait 的线程会被唤醒,此时 g_signaled...所谓 虚假唤醒,指的是即便我们没有 signal 相关的条件变量(即没有调用 pthread_cond_signal),等待(调用了 pthread_cond_wait)的线程也可能被(虚假)唤醒,此时我们必须重新检查对应的标记值...,接着 signal 了对应的条件变量,但是这两个操作之间是有"空隙"的,某一线程完全可以在这之间获取到互斥锁,改变标记值,然后再释放互斥锁,这导致标记值在 pthread_mutex_unlock 和...pthread_cond_signal 之间可能会发生变化,基于此,我们便仍然需要循环检查标记值(以防执行错误的逻辑).