std::latch用于一次性同步,主线程等待多个工作线程完成任务,计数归零后释放所有线程;std::barrier支持重复使用,适合多轮协作场景,每轮所有线程到达后执行可选完成函数并继续下一轮。

在C++20中,std::latch 和 std::barrier 是两个新的线程同步原语,用于简化多线程程序中的等待逻辑。它们比传统的条件变量更简洁、高效,适用于不同场景下的线程协调。
std::latch 是一个一次性使用的同步机制,它允许一个或多个线程等待,直到一个计数器减到零。一旦计数归零,所有等待的线程被释放,且 latch 不可重用。
常用方法:
适用场景:主线程启动多个工作线程,等待它们全部完成某阶段任务。
示例代码:
#include <iostream>
#include <thread>
#include <vector>
#include <latch>
<p>int main() {
std::latch latch(3); // 需要3个线程到达</p><pre class="brush:php;toolbar:false;">std::vector<std::thread> threads;
for (int i = 0; i < 3; ++i) {
threads.emplace_back([&](int id) {
std::cout << "线程 " << id << " 完成第一阶段\n";
latch.count_down(1); // 完成后倒计时减1
}, i);
}
latch.wait(); // 主线程等待所有线程完成
std::cout << "所有线程已就绪,继续执行...\n";
for (auto& t : threads) {
t.join();
}}
std::barrier 与 latch 类似,但支持重复使用。当指定数量的线程调用 arrive() 或 arrive_and_wait() 后,所有线程被同时释放,并可以进入下一轮同步。
标贝悦读AI配音
在线文字转语音软件-专业的配音网站
66
查看详情
关键特性:
示例:三个线程进行两轮并行计算,每轮结束后同步。
#include <iostream>
#include <thread>
#include <vector>
#include <barrier>
<p>int main() {
std::barrier sync_point(3, []{
std::cout << "【所有线程完成本轮】\n";
});</p><pre class="brush:php;toolbar:false;">auto worker = [&](int id) {
for (int round = 0; round < 2; ++round) {
std::cout << "线程 " << id << " 执行第 " << round + 1 << " 轮\n";
std::this_thread::sleep_for(std::chrono::milliseconds(100 * (id + 1)));
sync_point.arrive_and_wait(); // 等待其他线程完成本轮
}
};
std::vector<std::thread> threads;
for (int i = 0; i < 3; ++i) {
threads.emplace_back(worker, i);
}
for (auto& t : threads) {
t.join();
}}
根据使用需求决定:
基本上就这些。这两个新工具让C++20的多线程同步更直观、安全,减少了手动管理条件变量的复杂性。不复杂但容易忽略的是:确保每个线程对 latch/barrier 的调用次数正确,避免死锁或未定义行为。
以上就是c++++怎么使用std::latch和std::barrier进行线程同步_C++20多线程同步原语使用教程的详细内容,更多请关注其它相关文章!
# 可选
# 网站建设优化在哪里做好
# 甘肃关键词排名公司排行
# 地产营销推广要素
# 福鼎网站建设工作避雷
# 黑龙江网站优化软件
# 午夜性seo宗合511
# 营销亮点推广要写哪一些
# 网站的营销推广方案制作
# 周至品牌营销推广方式
# 吉林抖音营销推广排名
# 本轮
# 高性能
# 工具
# 死锁
# 数据结构
# 重复使用
# 自己的
# 多个
# 如何使用
# 多线程
# 同步机制
# stream
# ios
# c++
# ai
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
食品生产用水只要符合国家规定的生活饮用水卫生标准就可以吗
Go Template中优雅处理循环最后一项:自定义函数实践
《淘宝联盟》推广自己的店铺方法
风神瞳获取全攻略
如何在mysql中使用索引提示_mysql索引提示优化方法
动漫岛在线动漫网 动漫岛动漫在线观看官方入口
《植物大战僵尸3》火龙草作用介绍
Python对象引用与属性赋值:理解链表中的行为
太平年在哪个平台播出
铁路12306怎么申请退票_铁路12306退票申请操作流程
word文档行距怎么调?word文档调行距的操作步骤
一加 Ace 6V 快充无法启用_一加 Ace 6V 充电优化
背部总是隐隐作痛怎么回事 背痛如何改善
包子漫画在线观看入口 包子漫画网正版全集链接
如何解决Casbin日志与应用日志不统一的问题,使用casbin/psr3-bridge实现无缝集成
PHP utf8_encode 字符编码转换疑难解析与最佳实践
Win10通知横幅停留时间修改 Win10自定义通知显示时长【技巧】
Windows Audio服务启动失败怎么办_电脑没声音的终极服务修复法【修复】
研招网官方网站招生平台入口_中国研究生招生信息网官网登录
微信朋友圈怎么设置三天可见 微信朋友圈设置指定天数可见步骤【教程】
服装短视频如何起号推广?服装短视频起号推广有什么要求?
快递查询,一键速查
iQOO手机信号差网络不稳定怎么办 信号问题原因排查与增强设置【攻略】
顺丰快递怎么查物流_顺丰快递物流信息实时查询操作指南
圆通快递官方入口不需要登录 在线查询入口快速查询
Word 2003字体大小设置方法
如何通过settings.json个性化您的VS Code体验
Python类装饰器动态修改方法时的类型提示:Mypy插件实现精确静态分析
iPhone 15 Pro如何查看存储空间占用_iPhone 15 Pro存储空间查看教程
如何高效地基于键列值映射DataFrame中的多个列
口腔诊所管理软件推荐
《红果免费短剧》下载观看方法
QQ邮箱官方登录页_腾讯出品安全稳定的邮箱服务
WPS长文档分栏排版不乱方法_WPS分栏+分节符报纸排版教程
优化 React onClick 事件处理:函数引用与箭头函数的对比
创建您的便携版VS Code:让配置随身携带
139邮箱登录入口官网 139邮箱登录入口官网网址
德邦快递会员怎么开通
德邦物流在线查询系统 德邦快递货物运输追踪
PHP安全加载非公开目录图片与动态内容类型处理指南
怎样让Windows 11的开始菜单恢复经典样式_Open-Shell工具使用指南【怀旧】
J*a中导出MySQL表为SQL脚本的两种方法
芒果TV官网登录入口 芒果TV官方网站登录入口
哔哩哔哩的|直播|间怎么送礼物_哔哩哔哩|直播|送礼操作指南
Symfony路由参数转换器:实体存在性验证与错误处理策略
Excel如何快速找到并断开外部数据源链接_Excel外部数据源断开方法
AO3中文版手机快速通道_AO3最新稳定链接更新
Win10如何关闭操作中心通知 Win10免打扰设置全攻略【清爽】
漫蛙漫画直连入口 _ manwa官方备用入口实时检测
《随手记》启用语音备注方法
2025-11-14
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。