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

Why does allowing pthread_cond_wait() to sometimes get a spurious wakeup improve performance?

本文关键字:唤醒 高性能 pthread cond wait 为什么      更新时间:2023-10-16

我知道pthread_cond_wait()被记录为获得虚假唤醒,调用方必须检查该条件,这样做的动机是允许pthread-cond_wait的实现具有更好的性能,并迫使调用方创建更健壮的代码。

然而,除了提到避免比赛条件昂贵之外,我还没有看到任何人具体说明这会带来什么样的表现机会。

有人能详细介绍一下会出现什么样的比赛条件,以确保不会出现虚假的唤醒,以及什么硬件架构会导致这种情况的出现吗?

不能保证线程在发出信号时立即运行。它只是被标记为"就绪",并将由系统调度程序来运行。在它变为可调度的时间和实际调度的时间之间,另一个线程可能已经改变了底层条件。

例如:

线程A:等待条件变量。

线程B:更新状态。信号条件可变。

线程C:重置状态

线程A:醒检查底层状态,它是不变的。