Barrier 组织多个线程及时在某个时刻碰面
2024-08-29 06:36:41
任意一个线程调用了 _barrier.SignalAndWait() 方法后,会执行一个回调函数来打印出阶段。
/// <summary>
/// 实例 Barrier 类
/// </summary>
public static Barrier _barrier = new Barrier(, b => Console.WriteLine($"第 {b.CurrentPhaseNumber + 1} 阶段结束")); /// <summary>
/// 向 Barrier 发送信号
/// </summary>
/// <param name="name"></param>
/// <param name="message"></param>
/// <param name="seconds"></param>
public static void PlayMusic(string name, string message, int seconds)
{
for (int i = ; i < ; i++)
{
Console.WriteLine("------------------------"); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(seconds));
Console.WriteLine($"{name} 开始 {message}"); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(seconds));
Console.WriteLine($"{name} 结束 {message}"); // 回调函数 打印出阶段
_barrier.SignalAndWait();
}
}
每个线程将向 Barrier 发送两次信号,所以会有两个阶段,可以在每个迭代结束前执行一些计算。当最后一个线程调用 SignalAndWait方法时可以在迭代结束时进行交互。
/// <summary>
/// 执行
/// </summary>
public static void Implement()
{
var t1 = new System.Threading.Thread(() => PlayMusic("吉他手", "奏曲", )); var t2 = new System.Threading.Thread(() => PlayMusic("歌手", "唱他的歌", )); t1.Start();
t2.Start();
}
输出结果:
最新文章
- HTML5 Boilerplate - 让页面有个好的开始
- 学习RBAC 用户&#183;角色&#183;权限&#183;表
- hive0.12 rcfile gzip 测试
- 2016 - 1- 22 Build a Nav bar (intro to HTML&;CSS)
- Vue.js 学习笔记 一
- [认证授权] 5.OIDC(OpenId Connect)身份认证授权(扩展部分)
- Java注解(3)-注解处理器(编译期|RetentionPolicy.SOURCE)
- jquery 表双击某行时,取出某行中各列的数值.
- pwnable.tw dubblesort
- centos7.5 安装mysql8.0
- JMeter&#160;java.net.SocketException:Operationnotsupported:connect解决方案
- BZOJ.5249.[九省联考2018]iiidx(贪心 线段树)
- 初始Java
- VS2015安装及单元测试
- Java开发万年历
- 用flask和长轮询实现对帅哥投票和实时查看票数
- 用开源项目CropImage实现图片的裁剪(不推荐)
- 【经验】STL的list vector在iterator迭代器的循环中 使用erase 造成的BUG
- 第十章 消息驱动的微服务: Spring Cloud Stream
- SonarQube安装