.NET 4 System.Threading.Barrier 类
来源:互联网 发布:vmware8.0.2安装ubuntu 编辑:程序博客网 时间:2024/06/05 11:15
在Visual Studio 2010 and .NET Framework 4 Training Kit中有个System.Threading.Barrier的Demo,通过Barrier Class我们可以控制线程的运行,做到线程同步的效果。
Barrier Class在使用上十分的简单,只要在Barrier的构造函数中传入participantCount(简单的说就是要等待的线程个数),并在要同步的点调用SignalAndWait方法就可以了。线程会在调用SignalAndWait之后暂停运行,等待所有参与的线程都到达了同步点才继续往下运行。
举个例子来看,假设今天Charlie、Mac、Dennis三个人相约要去西雅图喝咖啡。由于三个人的住的地区不尽相同,且车子都需要加油,因此他们约在途中会经过的加油站待会合后一同前往。这样的情境我们可以通过Thread与Barrier用程序仿真出来。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace BarrierDemo
{
class Program
{
static Barrier sync;
static CancellationToken token;
static void Main(string[] args)
{
var source = new CancellationTokenSource();
token = source.Token;
sync = new Barrier(3);
var charlie = new Thread(() => DriveToBoston("Charlie", TimeSpan.FromSeconds(1))); charlie.Start();
var mac = new Thread(() => DriveToBoston("Mac", TimeSpan.FromSeconds(2))); mac.Start();
var dennis = new Thread(() => DriveToBoston("Dennis", TimeSpan.FromSeconds(3))); dennis.Start();
//source.Cancel();
charlie.Join();
mac.Join();
dennis.Join();
Console.ReadKey();
}
static void DriveToBoston(string name, TimeSpan timeToGasStation)
{
try
{
Console.WriteLine("[{0}] Leaving House", name);
// Perform some work
Thread.Sleep(timeToGasStation);
Console.WriteLine("[{0}] Arrived at Gas Station", name);
// Need to sync here
sync.SignalAndWait(token);
// Perform some more work
Console.WriteLine("[{0}] Leaving for Boston", name);
}
catch (OperationCanceledException)
{
Console.WriteLine("[{0}] Caravan was cancelled! Going home!", name);
}
}
}
}
- .NET 4 System.Threading.Barrier 类
- .NET 4 System.Threading.CountdownEvent
- 讲解定时器VB.NET System.Threading类
- .NET多线程编程 - System.Threading.Thread类
- System.Threading.Thread类
- System.Threading.Thread类
- .NET多线程编程(2):System.Threading.Thread类
- .NET多线程编程(2):System.Threading.Thread类
- .NET多线程编程(2):System.Threading.Thread类
- .NET多线程编程(2):System.Threading.Thread类
- .NET多线程编程(2):System.Threading.Thread类
- .NET多线程编程(2):System.Threading.Thread类
- .NET多线程编程(2):System.Threading.Thread类
- .NET多线程编程(2):System.Threading.Thread类
- .NET多线程编程(2):System.Threading.Thread类
- python模块学习(threading模块中的Barrier类)
- System.Threading.Thread类方法
- System.Threading
- Google 英文翻译版
- flex Panel控件内部容器大小计算方法
- 时下最流行的经典生活感悟
- C# 4.0 Optional Parameters 和Named Parameters
- .NET 4 System.Threading.CountdownEvent
- .NET 4 System.Threading.Barrier 类
- SQL Azure十月份更新
- 互联网也要动感起来
- 使用LogParser分析网站运行情况(比较简单)
- 为何中国电信在今年如此激进
- Palm Pre SDK 初体验
- 电话号码都具有位置信息吗
- c99
- hibernate 返回map