📜  autoresetevent - C# (1)

📅  最后修改于: 2023-12-03 15:29:32.432000             🧑  作者: Mango

AutoResetEvent - C#

AutoResetEvent是C#中的一种同步对象,可用于在多线程间同步操作。AutoResetEvent被设计为一种锁定机制,允许一个线程在某个共享状态满足给定条件时暂停,直到另一个线程使该共享状态发生变化并利用信号通知该线程继续执行。

以下是AutoResetEvent的一些重要特点和用法:

特点
  • AutoResetEvent是一种基于信号的同步对象,用于线程间通信。
  • 一个AutoResetEvent对象与一个二进制标志位相关联。
  • 当标志位为true时,通过调用AutoResetEvent的WaitOne方法可以阻塞一个线程。
  • 在另一个线程调用AutoResetEvent的Set方法后,标志位会被置为false,阻塞的线程得以继续执行。
用法
using System.Threading;

class Program
{
    // 创建一个AutoResetEvent对象
    static AutoResetEvent _autoResetEvent = new AutoResetEvent(false);

    static void Main(string[] args)
    {
        // 创建两个线程来执行某个操作
        Thread thread1 = new Thread(() =>
        {
            Console.WriteLine("Thread1 is waiting for the AutoResetEvent");
            // 在AutoResetEvent对象上等待
            _autoResetEvent.WaitOne();
            Console.WriteLine("Thread1 is now awake");
        });

        Thread thread2 = new Thread(() =>
        {
            Console.WriteLine("Thread2 is doing some work...");
            Thread.Sleep(2000);
            Console.WriteLine("Thread2 has finished and is signaling the AutoResetEvent");
            // 向AutoResetEvent对象发送信号
            _autoResetEvent.Set();
        });

        // 启动两个线程
        thread1.Start();
        thread2.Start();

        // 等待两个线程执行完毕
        thread1.Join();
        thread2.Join();

        Console.WriteLine("Done.");
        Console.ReadKey();
    }
}

上述代码中,我们创建了一个AutoResetEvent对象,并在两个线程中使用它。主线程启动线程1和线程2。线程1在AutoResetEvent上等待,直到线程2调用Set方法向AutoResetEvent对象发送信号。在此之后,线程1被唤醒并继续执行。主线程等待两个线程执行完毕以打印“Done.”,之后程序停止执行。