gpt4 book ai didi

c++ - std::atomic 和 std::condition_variable 等待、notify_* 方法的区别

转载 作者:行者123 更新时间:2023-12-01 13:26:44 25 4
gpt4 key购买 nike

我正在浏览“原子操作库”,并遇到了原子“等待”和“通知_”方法的一个新的 c++20 特性。我很好奇 std::condition_variable 的 'wait' 和 'notify_' 方法有什么区别。

最佳答案

标准:原子 wait , notify_allnotify_one方法类似于条件变量的方法。它们允许通过使用更高效和轻量级的原子变量来实现以前需要条件变量的逻辑。wait函数阻塞线程,直到原子对象的值被修改。它需要一个参数来与原子对象的值进行比较。它反复执行:

  • 如果值相等,它将阻塞线程直到notify_one 通知。或 notify_all ,或者线程被虚假地解除阻塞。
  • 否则,返回。

  • 注意: wait保证仅在值已更改时返回,即使底层实现虚假地解除阻塞。

    你可以在这里找到实现: https://github.com/ogiroux/atomic_wait/ .
    策略是这样选择的,按平台:
  • Linux:默认为 futex(带表),回退到 futex(无表)-> CVs -> 定时退避 -> 自旋。
  • Mac:默认为 CV(表格),回退到定时退避 -> 旋转。
  • Windows:默认为 futex(无表),回退到定时退避 -> 旋转。
  • CUDA:默认为定时退避,回退到自旋。 (这并不是在此树中全部 checkin 。)
  • 未识别的平台:默认为自旋。
  • 关于c++ - std::atomic 和 std::condition_variable 等待、notify_* 方法的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62859596/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com