2025年条件变量定义(条件变量函数)

条件变量定义(条件变量函数)condition variable 类是同步原语 能用于阻塞一个线程 或同时阻塞多个线程 直至另一线程修改共享变量 条件 并通知 condition variable 有意修改变量的线程必须 获得 std mutex 常通过 std lock guard 在保有锁时进行修改 在 std condition variable 上执行 notify one 或

大家好,我是讯享网,很高兴认识大家。



condition_variable 类是同步原语,能用于阻塞一个线程,或同时阻塞多个线程,直至另一线程修改共享变量(条件)并通知 condition_variable 。

有意修改变量的线程必须

  1. 获得 std::mutex (常通过 std::lock_guard )
  2. 在保有锁时进行修改
  3. 在 std::condition_variable 上执行 notify_one 或 notify_all(不需要为通知保有锁)

即使共享变量是原子的,也必须在互斥下修改它,以正确地发布修改到等待的线程。


讯享网

任何有意在 std::condition_variable 上等待的线程必须

  1. 在与用于保护共享变量者相同的互斥上获得 std::unique_lockstd::mutex
  2. 执行下列之一:
    • 检查条件,是否为已更新或提醒它的情况
    • 执行 wait 、 wait_for 或 wait_until ,等待操作自动释放互斥,并悬挂线程的执行。
    • condition_variable 被通知时,时限消失或虚假唤醒发生,线程被唤醒,且自动重获得互斥。之后线程应检查条件,若唤醒是虚假的,则继续等待。
    • 或者使用 wait 、 wait_for 及 wait_until 的有谓词重载,它们包揽以上三个步骤

std::condition_variable 只可与 std::unique_lockstd::mutex 一同使用;此限制在一些平台上允许最大效率。 std::condition_variable_any 提供可与任何基本可锁定 (BasicLockable) 对象,例如 std::shared_lock 一同使用的条件变量。

condition_variable 容许 wait 、 wait_for 、 wait_until 、 notify_one 及 notify_all 成员函数的同时调用。

类 std::condition_variable 是标准布局类型 (StandardLayoutType) 。它非可复制构造 (CopyConstructible) 、可移动构造 (MoveConstructible) 、可复制赋值 (CopyAssignable) 或可移动赋值 (MoveAssignable) 。

 

讯享网
讯享网
 

若锁是 std::unique_lock ,则 std::condition_variable 可能提供更好的性能。

讯享网

小讯
上一篇 2025-04-28 23:45
下一篇 2025-05-13 23:01

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/154477.html