0

0

C# Barrier类使用方法 C#如何同步多个线程在某个点汇合

幻夢星雲

幻夢星雲

发布时间:2026-02-02 11:25:26

|

140人浏览过

|

来源于php中文网

原创

Barrier是C#中支持多轮复用的汇合同步原语,适用于多个线程必须全部到达某点后才共同继续执行的场景;它自动进入下一轮等待,支持回调、阶段编号,但不支持取消或中断,需自行包装以实现超时和异常处理。

c# barrier类使用方法 c#如何同步多个线程在某个点汇合

Barrier 是什么,什么时候该用它Barrier 是 C# 中用于多线程“汇合同步”的轻量级原语,适用于多个线程必须**全部到达某个逻辑点后才一起继续执行**的场景。它不像 ManualResetEvent 那样需要手动计数和重置,也不像 CountdownEvent 那样只做一次性等待——Barrier 支持**多次复用**,每次汇合后自动进入下一轮。

常见适用场景包括:并行计算的迭代步进(如数值模拟每轮更新)、分段处理后统一汇总、测试中模拟多线程竞态时的可控停靠点。

初始化 Barrier 并让线程等待 创建时需指定参与线程总数,这个数在生命周期内不可变:
var barrier = new Barrier(4); // 期待 4 个线程到达

每个线程调用 SignalAndWait() 表示自己已抵达,并阻塞直到其余所有线程也调用该方法:

  • 调用 SignalAndWait() 是线程安全的,可被任意线程多次调用
  • 首次所有线程都调用后,屏障“打开”,所有线程继续;同时屏障自动进入第二轮等待
  • 若某线程提前退出(未调用 SignalAndWait()),其余线程将永久阻塞——这是最常见死锁原因
  • 可传入一个 Action 委托,在最后一人到达、所有人释放前执行一次(比如做本轮汇总)

示例:

百度GBI
百度GBI

百度GBI-你的大模型商业分析助手

下载
var barrier = new Barrier(3, b => Console.WriteLine($"第 {b.CurrentPhaseNumber} 轮汇合完成"));
Task.Run(() => { Thread.Sleep(100); barrier.SignalAndWait(); });
Task.Run(() => { Thread.Sleep(200); barrier.SignalAndWait(); });
Task.Run(() => { Thread.Sleep(50);  barrier.SignalAndWait(); });

如何安全地提前退出或处理异常Barrier 本身不响应取消令牌,也不能被中断。若需支持取消或超时,必须自行包装:
  • 不要依赖 Thread.Abort()(已废弃)或暴力中断线程
  • 推荐用 CancellationToken 配合轮询 + WaitOne(timeout) 自建等待逻辑,或改用 Task.WhenAll() + Task.Delay() 组合模拟屏障行为
  • 若某线程抛出异常,其他线程仍在 SignalAndWait() 中阻塞,异常不会自动传播——必须在外层 try/catch 分别捕获
  • barrier.Dispose() 后再调用 SignalAndWait() 会抛出 ObjectDisposedException

Barrier 与 CountdownEvent 的关键区别 两者都用于计数同步,但语义和生命周期完全不同:
  • CountdownEvent 是“一次性门闩”:初始化为 N,每次 Signal() 减 1,减到 0 后所有等待者释放,之后再 Wait() 会立即返回;无法重置(除非手动 Reset(N),但不推荐)
  • Barrier 是“循环路障”:每次 SignalAndWait() 都参与计数,全员到达即通关并自动开启下一轮;天生支持多阶段协作
  • 性能上,Barrier 内部使用无锁结构优化,高并发下比反复 Reset()CountdownEvent 更稳定

真正容易被忽略的是:Barrier 的“阶段号”(CurrentPhaseNumber)从 0 开始,且每次全员通过后才加 1——这意味着你在回调里看到的 phase number,是本轮刚完成的序号,不是下一轮的。如果逻辑依赖阶段编号做状态切换,务必注意这个偏移。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

546

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

212

2025.12.24

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

20

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

19

2026.01.21

Java 并发编程高级实践
Java 并发编程高级实践

本专题深入讲解 Java 在高并发开发中的核心技术,涵盖线程模型、Thread 与 Runnable、Lock 与 synchronized、原子类、并发容器、线程池(Executor 框架)、阻塞队列、并发工具类(CountDownLatch、Semaphore)、以及高并发系统设计中的关键策略。通过实战案例帮助学习者全面掌握构建高性能并发应用的工程能力。

87

2025.12.01

AO3官网入口与中文阅读设置 AO3网页版使用与访问
AO3官网入口与中文阅读设置 AO3网页版使用与访问

本专题围绕 Archive of Our Own(AO3)官网入口展开,系统整理 AO3 最新可用官网地址、网页版访问方式、正确打开链接的方法,并详细讲解 AO3 中文界面设置、阅读语言切换及基础使用流程,帮助用户稳定访问 AO3 官网,高效完成中文阅读与作品浏览。

1

2026.02.02

主流快递单号查询入口 实时物流进度一站式追踪专题
主流快递单号查询入口 实时物流进度一站式追踪专题

本专题聚合极兔快递、京东快递、中通快递、圆通快递、韵达快递等主流物流平台的单号查询与运单追踪内容,重点解决单号查询、手机号查物流、官网入口直达、包裹进度实时追踪等高频问题,帮助用户快速获取最新物流状态,提升查件效率与使用体验。

0

2026.02.02

Golang WebAssembly(WASM)开发入门
Golang WebAssembly(WASM)开发入门

本专题系统讲解 Golang 在 WebAssembly(WASM)开发中的实践方法,涵盖 WASM 基础原理、Go 编译到 WASM 的流程、与 JavaScript 的交互方式、性能与体积优化,以及典型应用场景(如前端计算、跨平台模块)。帮助开发者掌握 Go 在新一代 Web 技术栈中的应用能力。

1

2026.02.02

PHP Swoole 高性能服务开发
PHP Swoole 高性能服务开发

本专题聚焦 PHP Swoole 扩展在高性能服务端开发中的应用,系统讲解协程模型、异步IO、TCP/HTTP/WebSocket服务器、进程与任务管理、常驻内存架构设计。通过实战案例,帮助开发者掌握 使用 PHP 构建高并发、低延迟服务端应用的工程化能力。

0

2026.02.02

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号