latch是一次性同步工具,用于等待计数归零后释放所有线程,适用于单次等待场景;barrier支持重复使用,允许多轮同步,适合周期性或分阶段的并行任务。
在C++20中,latch 和 barrier 是新增的两种同步原语,用于简化多线程编程中的等待逻辑。它们都属于“栅栏”类同步机制,但用途和行为有所不同。
latch(闩锁)是一种一次性使用的同步工具,允许一个或多个线程等待,直到某个计数器递减到零。一旦计数归零,所有等待的线程被释放,且 latch 不可重用。
主要操作包括:
常见使用场景是主线程启动多个工作线程后,等待它们全部完成。
// 示例:使用 std::latch 等待所有线程完成
void worker(int id, std::latch& latch) {
std::cout
// 模拟工作
std::this_thread::sleep_for(std::chrono::milliseconds(100 * (id + 1)));
latch.count_down(1); // 完成任务,计数减一
}
int main() {
const int N = 3;
std::latch latch(N);
std::vector<:thread> workers;
for (int i = 0; i
workers.emplace_back(worker, i, std::ref(latch));
}
latch.wait(); // 主线程等待所有 worker 完成
std::cout
for (auto& w : workers) w.join();
return 0;
}
arrier?barrier(屏障)支持重复使用,允许多个线程在某个点汇合。当指定数量的线程调用 arrive() 或 arrive_and_wait() 后,所有线程被同时释放,并可重新开始下一轮同步。
与 latch 不同的是,barrier 可以循环使用,适合周期性同步场景,比如多阶段并行算法。
关键操作:
completion 函数会在每次所有线程会合后执行一次,通常用于重置状态或切换阶段。
// 示例:使用 std::barrier 实现两阶段并行任务
void stage_worker(int id, std::barrier& phase_barrier) {
// 第一阶段
std::cout
std::this_thread::sleep_for(std::chrono::milliseconds(50));
phase_barrier.arrive_and_wait(); // 等待所有线程完成第一阶段
// 第二阶段
std::cout
std::this_thread::sleep_for(std::chrono::milliseconds(50));
phase_barrier.arrive_and_wait(); // 等待第二阶段完成
}
int main() {
const int N = 3;
std::barrier barrier(N);
std::vector<:thread> workers;
for (int i = 0; i
workers.emplace_back(stage_worker, i, std::ref(barrier));
}
for (auto& w : workers) w.join();
std::cout
return 0;
}
选择哪种同步机制取决于你的需求:
注意:两者都不是锁,不保护共享数据,仅用于控制线程执行顺序。
基本上就这些。C++20 的 latch 和 barrier 让常见的并发模式变得更简洁安全,减少了手写条件变量和互斥量的复杂度。
# 工具
# ai
# c++
# ios
# stream
# 同步机制
# for
# include
# const
# auto
# int
# void
# 循环
# 线程
# 多线程
# 主线程
# Thread
# 并发
# 算法
# 多个
# 重复使用
# 的是
# 分阶段
# 是一种
# 两种
# 适用于
# 会在
# 有所不同
# 不支持
相关文章:
如何通过山东自助建站平台快速注册域名?
小型网站建站如何选择虚拟主机?
如何在Windows服务器上快速搭建网站?
如何快速搭建自助建站会员专属系统?
在线制作视频的网站有哪些,电脑如何制作视频短片?
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
如何基于云服务器快速搭建网站及云盘系统?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
建站为何优先选择香港服务器?
如何在香港免费服务器上快速搭建网站?
建站之星如何快速更换网站模板?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
免费视频制作网站,更新又快又好的免费电影网站?
建站之星后台密码遗忘?如何快速找回?
香港服务器WordPress建站指南:SEO优化与高效部署策略
如何用y主机助手快速搭建网站?
建站之星如何快速生成多端适配网站?
建站之星如何优化SEO以实现高效排名?
网站网页制作专业公司,怎样制作自己的网页?
如何自定义建站之星模板颜色并下载新样式?
如何登录建站主机?访问步骤全解析
,交易猫的商品怎么发布到网站上去?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
建站之星备案流程有哪些注意事项?
七夕网站制作视频,七夕大促活动怎么报名?
网站制作说明怎么写,简述网页设计的流程并说明原因?
电脑免费海报制作网站推荐,招聘海报哪个网站多?
如何在景安服务器上快速搭建个人网站?
如何用免费手机建站系统零基础打造专业网站?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
如何使用Golang table-driven基准测试_多组数据测量函数效率
焦点电影公司作品,电影焦点结局是什么?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
如何高效利用亚马逊云主机搭建企业网站?
如何快速搭建高效服务器建站系统?
建站主机如何选?性能与价格怎样平衡?
制作网站的模板软件,网站怎么建设?
小建面朝正北,A点实际方位是否存在偏差?
,制作一个手机app网站要多少钱?
建站主机与虚拟主机有何区别?如何选择最优方案?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
如何选择域名并搭建高效网站?
如何选择高效可靠的多用户建站源码资源?
大连网站设计制作招聘信息,大连投诉网站有哪些?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
如何通过虚拟主机快速搭建个人网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。