为什么允许pthread_cond_wait()有时会获得虚假唤醒提高性能?

时间:2012-04-03 14:39:15

标签: c++ performance pthreads mutex race-condition

我知道pthread_cond_wait()被记录为获得虚假的唤醒,并且调用者必须检查该条件,并且这样做的动机是允许pthread_cond_wait()的实现具有更好的性能并强制调用者创建更多强大的代码。

然而,我没有看到任何人对此提供的表现机会有具体了解,除了提及竞争条件之外,这将是非常昂贵的。

有人可以详细说明会出现什么竞争条件,以确保没有虚假的唤醒,以及哪些硬件架构会导致这种情况出现?

1 个答案:

答案 0 :(得分:1)

无法保证您的线程在发出信号时会立即运行。它只是被标记为“就绪”,并且将受系统调度程序的支配。在这段时间之间,它变得可调度并且实际调度的时间,另一个线程可能已经改变了基础条件。

例如:

线程A: 等待条件变量。

主题B: 更新状态。 信号条件变量。

主题C: 重置状态

线程A: 唤醒。 检查基础状态,它没有变化。