Barrier类是Framework4提供的一个信号构造,它实现了一个线程执行屏障,允许多个线程在指定时间集合。此方法快速高效,是基于Wait,Pulse和spinlocks方法。
使用这个类,首先得初始化它。然后指定多少线程应该参与集合。让每个线程在集合的时候 调用SignalAndWait方法,初始化barrier的值为3意味着SignalAndWait一直被阻塞,直到方法被执行了3次,然后它才会启动:再次调用SignalAndWait将继续阻塞直到方法再被执行3次。这就保持了线程的和其他线程步调一致。
看下面的例子
每个线程都会打印0-4,并且和其他线程步调一致。
static Barrier _barrier = new Barrier(3);
static void Main(string[] args)
{
new Thread(Speak).Start();
new Thread(Speak).Start();
     new Thread(Speak).Start();//如果此句去掉,则barrier将由于缺少一次SignalAndWait调用而一直阻塞
}
static void Speak()
{
for (int i = 0; i < 5; i++)
{
Console.Write(i + " ");
_barrier.SignalAndWait();
}
}
OUTPUT: 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4
barrier类的构造函数还能指定一个Action委托,该委托在阻塞取消的时候运行。
static Barrier _barrier = new Barrier(3,c)=>Console.WriteLine(c.ParticipantCount));
static void Main(string[] args)
{
new Thread(Speak).Start();
new Thread(Speak).Start();
new Thread(Speak).Start();
}
static void Speak()
{
for (int i = 0; i < 5; i++)
{
Console.Write(i + " ");
_barrier.SignalAndWait();
}
}
输出:
0 0 0 3
1 1 1 3
2 2 2 3
3 3 3 3
4 4 4 3

Barrier类介绍相关推荐

  1. Hbase API中常用类介绍和使用

    网上Hbase的介绍有很多,案例也不少.自己写了个Demo,进行一些简单的总结. HBase 常用类介绍. JAVA API 和 HBase数据库模型之间的关系 JAVA 类 Hbase 数据模型 H ...

  2. C# Barrier类

    对于同步,Barrier 类非常适用于其中工作有多个任务分支且以后又需要合并工作的情况.Barrier 类用于需要同步的参与者.激活一个任务时,就可以动态地添加其他参与者,例如,从父任务中创建子任务. ...

  3. C#中的Dictionary字典类介绍(转载)

    C#中的Dictionary字典类介绍 关键字:C# Dictionary 字典  作者:txw1958 原文:http://www.cnblogs.com/txw1958/archive/2012/ ...

  4. Java中BigDecimal类介绍及用法

    Java中BigDecimal类介绍及用法 Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高 ...

  5. C++/C--istringstream、ostringstream、stringstream 类介绍【转载】

    文章目录 1 C++的输入输出分为三种: 1.1 基于控制台的I/O 1.2 基于文件的I/O 1.3 基于字符串的I/O 2 头文件 3 功能 4 具体分析 4.1 istringstream类 4 ...

  6. Java核心类库-IO-File类介绍和路径分割符

    Java的IO:类和接口存在于Java.io包中 讲IO操作之前,必须要先讲File类(文件/目录) File类介绍和路径分割符: File类是IO包中唯一表示磁盘文件和磁盘目录的对象的路径. 该类包 ...

  7. Android Canvas类介绍和Android Draw Rect 坐标图示

    当我们调整好画笔之后,现在需要绘制到画布上,这就得用Canvas类了.在Android中既然把Canvas当做画布,那么就可以在画布上绘制我们想要的任何东西.除了在画布上绘制之外,还需要设置一些关于画 ...

  8. CYQ.Data.Orm.DBFast 新增类介绍(含类的源码及新版本配置工具源码)

    前言: 以下功能在国庆期就完成并提前发布了,但到今天才有时间写文介绍,主要是国庆后还是选择就职了,悲催的是上班的地方全公司都能上网,唯独开发部竟不让上网,是个局域网. 也不是全不能上,房间里有三台能上 ...

  9. POI 导出导入工具类介绍

    介绍: Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. .NET的开发人员则可以利用NPOI (POI ...

最新文章

  1. 机器学习数学基础系列|凸优化——开启新世界的大门(上)
  2. 计算机知识的更新速度,笔记本电脑硬盘如何升级?要容量还是速度?这些知识你需要学会...
  3. 熟练掌握Word2003中的突出显示功能
  4. com.microsoft.sqlserver.jdbc.SQLServerException: 索引 1 超出范围
  5. mac安装sudo pip install MySQL-python报错EnvironmentError: mysql_config not found解决方法
  6. BUG——Celery ValueError: not enough values to unpack
  7. IT英语4-计算机英语缩写术语
  8. 戈登贝尔奖是超级计算机应用的最高奖,中国首获高性能计算应用领域最高奖戈登贝尔奖...
  9. 他靠写程序封神,买不起操作系统,就动手写一个!曾拒绝乔布斯的offer
  10. 电脑怎么设置时间自动关机?
  11. python爬不同图片分别保存在不同文件夹中的实现
  12. iOS 苹果手机客户端微信支付调起失败--无法调起微信的原因
  13. Python SMTP发送邮件
  14. ubuntu 如何放大终端窗口字体
  15. EXCEL,筛选合并单元格后的全部内容
  16. 冰与火之歌居然是在 DOS 系统上写出来的
  17. 黑白图片怎样上色?教你如何给黑白照片上色
  18. 高红冰:1个贫困县连接280个城市 电商减贫潜力巨大
  19. JQuery(四) 对象数组进行排序
  20. TC275——05ASCLIN-UART

热门文章

  1. dell服务器装系统按哪个键,bios设置 dell笔记本重装系统按哪个键进入bios
  2. 最大化 Google Chrome 浏览器
  3. WebGIS开发绘制地图标注
  4. linux调整笔记本色彩,linux 调节笔记本屏幕亮度
  5. USB射频功率计DIY——方案
  6. 二项分布和泊松分布,二者的关系
  7. C++晋升之图像采集(我也略懂皮毛)
  8. 如何让暴风影音播放flv文件
  9. 【泛函分析】存在有可列个间断点的单调函数
  10. 贪心算法 Greedy