《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的方法来递减的填充数字。

原文地址:https://www.cnblogs.com/T-ARF/p/9398002.html