《C#多线程编程实战》2.7 CountDownEvent
这个同步线程的类大概是东北的。
很有意思。
会限定你的线程使用的次数,更形象一点的像是你妈,提前准备好你要使用的线程的次数,用不完还不高兴那种的。
使用顺序基本就是
实例化 填充线程的启动次数
使用Signal() 来递减启动次数
Wait() 会阻止当前线程,这个是当所有的实例化时所填充的启动次数全部结束才会释放线程。
最后是Dispose来释放线程。
class Program { static CountdownEvent countdown = new CountdownEvent(2); static void Ptest(string message, int seconds) { Thread.Sleep(TimeSpan.FromSeconds(seconds)); Console.WriteLine(message); countdown.Signal(); } static void Main(string[] args) { Console.WriteLine("Starting two operations"); var t1 = new Thread(() => Ptest("Operatopm 1 is copletad", 4)); var t2 = new Thread(() => Ptest("Operatopm is copletad", 8)); t1.Start(); t2.Start(); countdown.Wait(); Console.WriteLine("both operations have been completad"); countdown.Dispose(); Console.ReadKey(); } }
不得不说Thead的线程同步方式真的是很多啊。
侧重点也有很多不同。
但基本的使用方式无异乎
等待,释放,设置等待这三点。
有点像是排队银行取钱,一切都要按顺序来。如果强队就是出错了,保安会报警的。
还有的是CountdownEvent的结束标志就是实例化的时候所填充的次数必须是全部结束了。值得注意!
也就是每一次方法结束时都要使用CountdownEvent的Singal的方法来递减的填充数字。