AutoResetEvent
是C#中的一個同步原語,它用于在多線程環境中控制對共享資源的訪問
AutoResetEvent
的主要功能如下:
初始化:創建一個AutoResetEvent
對象時,可以指定一個初始狀態。如果指定為true
,則表示事件已經觸發,等待的線程可以立即獲得信號;如果指定為false
,則表示事件未觸發,等待的線程將被阻塞,直到事件被觸發。
等待:線程可以通過調用WaitOne()
方法來等待事件被觸發。如果事件已經觸發,則線程立即獲得信號并繼續執行;如果事件未觸發,則線程被阻塞,直到事件被觸發。
觸發:線程可以通過調用Set()
方法來觸發事件。這將喚醒所有等待該事件的線程。如果有多個線程正在等待事件,那么只有一個線程會被喚醒,其他線程將繼續等待。
重置:線程可以通過調用Reset()
方法來重置事件的狀態。這將導致所有等待該事件的線程再次被阻塞,直到事件被重新觸發。
下面是一個簡單的AutoResetEvent
示例:
using System;
using System.Threading;
class Program
{
static AutoResetEvent _autoResetEvent = new AutoResetEvent(false);
static void Main()
{
Thread t1 = new Thread(ThreadMethod1);
Thread t2 = new Thread(ThreadMethod2);
t1.Start();
t2.Start();
t1.Join();
t2.Join();
}
static void ThreadMethod1()
{
Console.WriteLine("Thread 1 waiting for event...");
_autoResetEvent.WaitOne(); // 等待事件被觸發
Console.WriteLine("Thread 1: Event triggered!");
}
static void ThreadMethod2()
{
Console.WriteLine("Thread 2 waiting for event...");
_autoResetEvent.WaitOne(); // 等待事件被觸發
Console.WriteLine("Thread 2: Event triggered!");
}
}
在這個示例中,我們創建了兩個線程t1
和t2
,它們都在等待同一個AutoResetEvent
對象_autoResetEvent
被觸發。主線程首先啟動這兩個線程,然后等待它們完成。當主線程調用_autoResetEvent.Set()
方法時,兩個等待的線程都將被喚醒并繼續執行。