首页 > 其他分享 >CountdownEvent

CountdownEvent

时间:2024-10-20 12:32:04浏览次数:1  
标签:Console WriteLine Signal CountdownEvent static 信号

CountdownEvent是一种同步结构,主要用来协调多种同步处理后的结果场景使用。其含义为:定义一个多信号的结构,然后在应用时判断信号是否全部到达,如果全部到达则继续往下运行,否则进行阻塞,有意思的是,如果阻塞已过,那么再次运行到wait()时,线程是不会再次阻塞的,除非调用reset()重新初始化后才可以。这点和其余的同步结构不一样。

示例如下:

internal class Program
{
    static CountdownEvent e = new CountdownEvent(3);
    static bool isOutput = true;

    static int i = 0;
    static void Main(string[] args)
    {
        Thread t = new Thread(ProcessData);
        t.Start();

        Console.WriteLine("启动");
        i++;

        Console.WriteLine("信号1已到");
        e.Signal();
        Console.WriteLine("信号2已到");
        e.Signal();
        Console.WriteLine("信号3已到");
        e.Signal();

        Console.ReadLine();
        i++;
        Console.WriteLine("信号1又到");
        e.Signal();
        Console.WriteLine("信号2又到");
        e.Signal();
        Console.WriteLine("信号3又到");
        e.Signal();

        Console.ReadKey();

    }
    static void ProcessData()
    {
        while (isOutput)
        {
            Console.WriteLine("阻塞等待信号");
            e.Wait();
            Console.WriteLine("阻塞已过,处理:Processed {0}", i);
            e.Reset();
            if (i > 1)
            {
                isOutput = false;
            }
        }
        if (!isOutput)
        {
            e.Dispose();
            Console.WriteLine("处理完成");
        }
    }

}

运行结果:

 

标签:Console,WriteLine,Signal,CountdownEvent,static,信号
From: https://www.cnblogs.com/jizhong/p/18487120

相关文章

  • CountdownEvent
    CountdownEvent的注释为:表示在计数变为零时处于有信号状态的同步基元它是一个同步基元,它在收到一定次数的信号之后,将会解除对其等待线程的锁定。简的来说就是,事先设置需要有多少个通知,等待指定的通知数量全部到达后,Wait()才继续往下运行。代码示例如下:staticvoidMain(str......
  • C# CountdownEvent
    https://dotnetpattern.com/threading-countdownevent C#CountdownEventisasynchronizationprimitivewhichunblocksawaitingthreadwhenitsreceivessignalacertainnumberoftimes.CountdownEventisusedin fork-join scenarios.Asshownintheabove......
  • Semaphore 和 CountdownEvent 的使用总结
    信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量。一旦该关键代码段完成了,那么该线程必须释放信号量。其它想进入该关键代码段的线程必须等待直到第一个线程释......
  • CountdownEvent
    CountdownEventSystem.Threading.CountdownEventisasynchronizationprimitivethatunblocksitswaitingthreadsafterithasbeensignaledacertainnumberof......