g_signaled)
{
pthread_cond_wait(&g_cond, &g_mutex);
}
g_signaled = false...上述示例代码中,我们在设置 g_signaled 之后调用了 pthread_cond_signal,正常来讲的话,之前调用 pthread_cond_wait 的线程会被唤醒,此时 g_signaled...应该一定为真,但是细心的朋友应该会发现,代码中我们却使用了一个循环来检查 g_signaled 的真值(并在发现 g_signaled 不为真时释放互斥锁然后重新进入了等待(通过重新调用 pthread_cond_wait...g_signaled)
{
pthread_cond_wait(&g_cond, &g_mutex);
}
这么做的一个原因便是为了处理 虚假唤醒(spurious wakeup),...虚假唤醒看上去很恼人,似乎我们应该在接口层消除这种现象(即让 pthread_cond_wait 不产生虚假唤醒),但有两个原因让虚假唤醒最终保留了下来:
1.