,条件变量可以减少锁的竞争....我们在设置 g_signaled 之后调用了 pthread_cond_signal,正常来讲的话,之前调用 pthread_cond_wait 的线程会被唤醒,此时 g_signaled 应该一定为真,...(即没有调用 pthread_cond_signal),等待(调用了 pthread_cond_wait)的线程也可能被(虚假)唤醒,此时我们必须重新检查对应的标记值(以确认是否发生了(虚假)唤醒),又由于...即使消除了虚假唤醒,我们仍然需要循环检查标记值
这可能令人比较意外,问题在于除了虚假唤醒,还有一种称为 stolen wakeups 的现象也可能会影响标记值....,但是这两个操作之间是有"空隙"的,某一线程完全可以在这之间获取到互斥锁,改变标记值,然后再释放互斥锁,这导致标记值在 pthread_mutex_unlock 和 pthread_cond_signal