C++的std::barrier和std::latch怎么用?C++20线程同步原语【并发编程】


std::latch是一次性同步原语,用于等待指定数量的操作完成,计数归零后唤醒所有等待线程且不可重用;std::barrier是可重用同步原语,支持多轮阶段性汇合,并可选抵达回调函数。

c++的std::barrier和std::latch怎么用?c++20线程同步原语【并发编程】

std::barrierstd::latch 是 C++20 引入的两个轻量级同步原语,用于协调多个线程在某个点“汇合”(synchronize),但用途和生命周期有本质区别:前者可重用、后者一次性。

std::latch:一次性的“门闩”

std::latch 用来等待一组操作全部完成。它内部维护一个计数器,初始值由构造函数指定;每次调用 count_down() 计数器减一;当计数器归零,所有阻塞在 wait() 的线程被唤醒——且之后无法重置或复用。

典型场景:主线程启动多个工作线程,等它们全部初始化完毕再统一开始执行。

  • 构造时传入期望的线程数(如 std::latch ready(4) 表示等 4 次 count_down
  • 各线程完成准备后调用 ready.count_down()
  • 主线程调用 ready.wait() 阻塞,直到计数为 0
  • 不能重复使用,也不能增加计数;用完即弃

std::barrier:可重复使用的“路障”

std::barrier 也基于计数,但它支持“阶段式同步”——所有线程到达后一起通过,然后自动重置计数器,进入下一轮等待。适合循环协作场景,比如多线程迭代计算。

它还支持可选的“抵达后回调”(arrival phase function),在最后一名线程抵达、所有线程释放前执行一次(常用于汇总、交换数据等)。

FashionLabs FashionLabs

AI服装模特、商品图,可商用,低价提升销量神器

FashionLabs 86 查看详情 FashionLabs
  • 构造时指定参与线程数,例如 std::barrier sync(4)
  • 每个线程调用 sync.arrive_and_wait() —— 先抵达,再阻塞,等全员到齐才返回
  • 若需在同步点做全局操作,可用带回调的构造:std::barrier sync(4, []{ /* 每轮同步前执行一次 */ });
  • 无需手动管理状态,自动循环,适合多轮协作

别混淆:latch vs barrier 的关键区别

二者名字相似,但设计目标不同:

  • std::latch 是“等待完成”——像发令枪前的起跑线,所有人就位后只响一次
  • std::barrier 是“阶段性汇合”——像接力赛每一段的交接区,每轮都清空重来
  • latch 没有回调,barrier 可配回调;latch 不可重用,barrier 天然可重用
  • 两者都不拥有线程,也不负责线程创建/销毁,只是同步点

实际用法小提醒

它们头文件都是 <barrier></barrier>,注意编译器需支持 C++20(如 GCC 10+、Clang 11+、MSVC 19.28+),并开启 -std=c++20

不推荐用它们替代 mutex 或 condition_variable 做细粒度互斥;它们解决的是“集体行动步调一致”的问题,不是“保护共享数据”。用错场景反而引入竞态或死锁。

基本上就这些。不复杂但容易忽略细节——记清“一次”还是“多次”,就能选对工具。

以上就是C++的std::barrier和std::latch怎么用?C++20线程同步原语【并发编程】的详细内容,更多请关注其它相关文章!


# 工具  # 回调函数  # 多个  # 多线程  # 回调  # 区别  # 并发编程  # c++  # ai  # 泰安枫林seo工具  # 诸城招聘网站优化  # 怎么做电视剧剪辑网站推广  # 美团推广营销顾问  # 娄底网站建设价格实惠  # 广东网站建设易搜互联  # 美业网站有哪些平台推广  # 东莞抖音搜索排名关键词  # 厦门在线建设网站  # 携程旅行网站优化  # 新特性  # 都是  # 的是  # 如何实现  # 核心技术  # 可选  # 死锁 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 哔哩哔哩在线观看入口 B站官网免费进入  Selenium自动化:利用键盘模拟解决复杂日期输入框输入问题  Go App Engine 项目结构与包管理深度指南  如何在解析前预检查XML文件的完整性? 比如检查文件大小或特定结束标签  sublime如何撤销关闭的标签页_sublime重新打开已关闭文件技巧  B站怎么开|直播| B站|直播|申请需要什么条件【新手必看】  cad视图选项卡不见了怎么办_cad视图标签恢复显示方法  Go语言中方法接收器的选择:值类型还是指针类型?  多闪APP官方下载安装入口_多闪最新版本获取入口  快手缓存清理方法  抖音手机分身两个账号怎么切换?分身两个系统是一样的吗?  解决异步Python机器人中同步操作的阻塞问题  优酷下载视频的清晰度怎么选_优酷缓存清晰度设置与选择指南  Linux如何开发轻量级数据服务模块_Linux服务化设计  TikTok私信无法发送表情怎么办 TikTok消息表情发送修复方法  Animex动漫社社登录官网 Animex动漫社资源社入口直达  《洛克王国:世界》国家队搭配攻略  《火花chat》搜索好友方法  CSS如何在页面中引入重置样式_使用Normalize.css或Reset.css统一浏览器默认样式  Three.js中动态更换3D模型纹理的教程  告别繁琐SEO!如何使用SyliusSitemap插件自动化生成网站地图,提升搜索引擎排名  胃动力不足?试试这5个调理方法  谷歌浏览器如何查找和删除恶意软件 谷歌浏览器内置安全清理工具使用教程  VS Code源代码管理(SCM)视图的进阶使用技巧  VS Code快捷键when上下文子句的妙用  苹果手机如何清理系统缓存数据 iPhone非越狱清理垃圾文件的技巧【系统优化】  发博客与长微博技巧  漫蛙漫画官方网站使用_漫蛙manwa网页版在线入口教程  j*a中ArrayBlockingQueue的使用  猫眼电影app怎么查询电影院的营业时间_猫眼电影影院营业时间查询教程  《健康大兴》注册方法介绍  可米酷漫画在线阅读入口_ 可米酷漫画官网直达链接  AO3官方镜像链接 | 最新防走失网址永久收藏  荣耀magicv5怎么上手测评  mysql触发器如何编写_mysql触发器编写规范与代码示例讲解  c++如何实现观察者设计模式_c++行为型设计模式实战  《kimi智能助手》制作ppt教程  《宝可梦大集结》S4冠军之路开始时间介绍  t3出行如何使用微信支付  Go语言中方法与接收器:指针和值类型的调用机制详解  米侠浏览器插件无法启用怎么办 米侠浏览器扩展兼容性修复  吃完饭就犯困是什么原因 餐后嗜睡如何缓解  J*aScript大数运算_BigInt使用指南  苹果手机怎么合并照片_苹果手机合并多张照片的操作方法  DeepSeek超全面指南:入门必看  创建快捷方式启动系统保护  免费占卜在线神算_免费占卜手机神算  顺丰快递怎么查物流_顺丰快递物流信息实时查询操作指南  MySQL多重关联查询:利用别名高效获取同一表的多个关联字段  Win11如何分屏操作_Win11多窗口分屏技巧 

 2025-12-16

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.