我知道pthread_cond_wait()被记录为获得虚假的唤醒,并且调用者必须检查该条件,并且这样做的动机是允许pthread_cond_wait()的实现具有更好的性能并强制调用者创建更多强大的代码。
然而,我没有看到任何人对此提供的表现机会有具体了解,除了提及竞争条件之外,这将是非常昂贵的。
有人可以详细说明会出现什么竞争条件,以确保没有虚假的唤醒,以及哪些硬件架构会导致这种情况出现?
答案 0 :(得分:1)
无法保证您的线程在发出信号时会立即运行。它只是被标记为“就绪”,并且将受系统调度程序的支配。在这段时间之间,它变得可调度并且实际调度的时间,另一个线程可能已经改变了基础条件。
例如:
线程A: 等待条件变量。
主题B: 更新状态。 信号条件变量。
主题C: 重置状态
线程A: 唤醒。 检查基础状态,它没有变化。