为什么允许pthread_cond_wait()有时获得虚假唤醒会提高性能
Why does allowing pthread_cond_wait() to sometimes get a spurious wakeup improve performance?
我知道pthread_cond_wait()被记录为获得虚假唤醒,调用方必须检查该条件,这样做的动机是允许pthread-cond_wait的实现具有更好的性能,并迫使调用方创建更健壮的代码。
然而,除了提到避免比赛条件昂贵之外,我还没有看到任何人具体说明这会带来什么样的表现机会。
有人能详细介绍一下会出现什么样的比赛条件,以确保不会出现虚假的唤醒,以及什么硬件架构会导致这种情况的出现吗?
不能保证线程在发出信号时立即运行。它只是被标记为"就绪",并将由系统调度程序来运行。在它变为可调度的时间和实际调度的时间之间,另一个线程可能已经改变了底层条件。
例如:
线程A:等待条件变量。
线程B:更新状态。信号条件可变。
线程C:重置状态
线程A:醒检查底层状态,它是不变的。
相关文章:
- 虚假唤醒是否会解锁所有等待线程,甚至是不相关的线程?
- 是否有必要获取锁并在不需要唤醒线程时通知condition_variable?
- 如果我们使用 notify_one() 来唤醒线程,我们还需要 yield() - C++?
- 避免在条件更新时丢失唤醒是一个阻塞功能
- 升压插值条件变量可以虚假唤醒吗?
- 唤醒多个线程以在每个条件下工作一次
- 视频在唤醒其他线程时输入设备断开连接
- 从 16UC3 到 8UC3 的高性能 OpenCV 矩阵转换
- 如何从高性能的输入迭代器返回变体?
- 线程启动延迟 - 通知所有未唤醒所有线程
- 编写高性能C++二传手
- 提升图形库:以高性能的方式检查vertex_descriptor的有效性
- 使用set_alert_notify唤醒主线程的正确方法是什么?
- pthread 互斥锁 - 是定期检查还是操作系统唤醒它
- 在离开模式下唤醒窗户
- 使用 Poco:Condition 唤醒两个线程
- Futex等待/唤醒对实现获取/发布语义吗?
- 高性能程序,什么是更好的矢量数组或矢量的矢量
- std::condition_variable::notify_one() 不会唤醒等待线程
- 如何在不使用函数或类的情况下重复代码段,以便在C++中实现高性能循环