博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Barrier 组织多个线程及时在某个时刻碰面
阅读量:5149 次
发布时间:2019-06-13

本文共 1424 字,大约阅读时间需要 4 分钟。

任意一个线程调用了 _barrier.SignalAndWait() 方法后,会执行一个回调函数来打印出阶段。

1 ///  2         /// 实例 Barrier 类 3         ///  4         public static Barrier _barrier = new Barrier(2, b => Console.WriteLine($"第 {b.CurrentPhaseNumber + 1} 阶段结束")); 5  6         ///  7         /// 向 Barrier 发送信号 8         ///  9         /// 10         /// 11         /// 12         public static void PlayMusic(string name, string message, int seconds)13         {14             for (int i = 1; i < 3; i++)15             {16                 Console.WriteLine("------------------------");17 18                 System.Threading.Thread.Sleep(TimeSpan.FromSeconds(seconds));19                 Console.WriteLine($"{name} 开始 {message}");20 21                 System.Threading.Thread.Sleep(TimeSpan.FromSeconds(seconds));22                 Console.WriteLine($"{name} 结束 {message}");23 24                 // 回调函数 打印出阶段25                 _barrier.SignalAndWait();26             }27         }

 

每个线程将向 Barrier 发送两次信号,所以会有两个阶段,可以在每个迭代结束前执行一些计算。当最后一个线程调用 SignalAndWait方法时可以在迭代结束时进行交互。

1 ///  2         /// 执行 3         ///  4         public static void Implement() 5         { 6             var t1 = new System.Threading.Thread(() => PlayMusic("吉他手", "奏曲", 5)); 7  8             var t2 = new System.Threading.Thread(() => PlayMusic("歌手", "唱他的歌", 2)); 9 10             t1.Start();11             t2.Start();12         }

 

输出结果:

 

转载于:https://www.cnblogs.com/KevinTong/p/11489224.html

你可能感兴趣的文章
Http协议浅析
查看>>
接上文 下面是一段示例代码
查看>>
老李分享:webservice是什么?1
查看>>
老李分享大数据生态圈
查看>>
火火火---12幅算法生成火的图像
查看>>
图片淡入淡出
查看>>
SQL Server 数值四舍五入,小数点后保留2位
查看>>
创建WPF用户控件
查看>>
十六进制转化
查看>>
消息队列之 RabbitMQ
查看>>
06: django+celery+redis
查看>>
pyqt环境安装准备
查看>>
重命名某一路径下文件
查看>>
Spring中Bean的作用域
查看>>
C#中结构与类的区别
查看>>
springBoot yml 和 properties
查看>>
Source not included in list despite source list requirement
查看>>
FL2440驱动添加(5)ADC驱动学习笔记
查看>>
Qt 2D绘图之一:基本图形绘制和渐变填充
查看>>
CS (Compressive sensing, 压缩传感)
查看>>