当前位置:网站首页 > Haskell函数式编程 > 正文

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



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 可能提供更好的性能。

到此这篇条件变量定义(条件变量函数)的文章就介绍到这了,更多相关内容请继续浏览下面的相关 
  推荐文章,希望大家都能在编程的领域有一番成就! 
  

                            

版权声明


相关文章:

  • pyc文件是什么(pyc文件格式)2025-12-06 11:09:11
  • yml文件颜色不对(yml文件格式)2025-12-06 11:09:11
  • 泰拉瑞亚时间指令格式(泰拉瑞亚的时间进度是怎么算的)2025-12-06 11:09:11
  • 亲属卡暂无可用支付方式是什么意思(亲属卡暂无可用方式怎么回事)2025-12-06 11:09:11
  • jflash怎么烧录(jflash命令模式烧录)2025-12-06 11:09:11
  • docker网络模型(docker网络模型的实现方式)2025-12-06 11:09:11
  • 编程入门教学零基础(编程零基础教程)2025-12-06 11:09:11
  • redis的哨兵模式+spring整合(redis 哨兵模式配置)2025-12-06 11:09:11
  • 合并数组的函数是什么(excel数组合并函数)2025-12-06 11:09:11
  • 电力104协议(电力104协议报文格式)2025-12-06 11:09:11
  • 全屏图片