.net4.0新特性之线程同步
时间:2010-08-30 来源:郭鹏
有时候我们可能需要使用多线程来执行同一任务,这个任务可能包含多步,而每步之间可能并不相干,但是这个任务必须让所有步骤执行完成后才能够进入下一步。这就如同WF中的并行任务。在.net4.0之前我们可能需要几个类来做到同步。但是现在我们只需要1个类就OK。
代码
Console.WriteLine("任务启动");
using (CountdownEvent cd = new CountdownEvent(1))
{
for (var i = 0; i < 5; i++)
{
cd.AddCount();
System.Threading.ThreadPool.QueueUserWorkItem(
(o) =>
{
//do something
Console.WriteLine("线程:" +
Thread.CurrentThread.ManagedThreadId + ",工作启动");
Thread.Sleep(5000);
cd.Signal();
Console.WriteLine("线程:" + Thread.CurrentThread.ManagedThreadId + ",工作完毕 ");
});
}
cd.Signal();
cd.Wait();
}
通过以上代码,我们看到只需要使用CountdownEvent类的AddCount() 和 Signal()方法 就可能实现线程同步。
此外,还有一个类也能够实现线程同步:Barrier。然而这个类不是通过使用增加减少信号量来实现同步。在程序执行时我们可呢个为这个类定义需要接到几个信号后同步任务完成进入下一个任务。
Barrier _barrier = new Barrier(3);//接到3个任务后同步目标达成,进入下一个任务。
相关阅读 更多 +