在C#中,AutoResetEvent
是一個同步原語,用于在多個線程之間進行通信。它可以用于控制對共享資源的訪問,或者讓一個或多個線程等待其他線程完成操作。要創建一個 AutoResetEvent
,可以使用 new AutoResetEvent(bool)
構造函數,其中 bool
參數表示初始狀態。如果設置為 true
,則事件處于有信號狀態;如果設置為 false
,則事件處于無信號狀態。
以下是一個簡單的示例:
using System;
using System.Threading;
class Program
{
static AutoResetEvent autoResetEvent = new AutoResetEvent(false); // 創建一個初始狀態為無信號的 AutoResetEvent
static void Main()
{
Thread thread1 = new Thread(Thread1Method);
Thread thread2 = new Thread(Thread2Method);
thread1.Start();
thread2.Start();
thread1.Join();
thread2.Join();
}
static void Thread1Method()
{
Console.WriteLine("Thread 1 is waiting for the AutoResetEvent.");
autoResetEvent.WaitOne(); // 等待事件變為有信號狀態
Console.WriteLine("Thread 1 has been signaled.");
}
static void Thread2Method()
{
Thread.Sleep(1000); // 讓線程2休眠1秒,以便線程1先執行
Console.WriteLine("Thread 2 is signaling the AutoResetEvent.");
autoResetEvent.Set(); // 將事件設置為有信號狀態
}
}
在這個示例中,我們創建了兩個線程 thread1
和 thread2
。Thread1Method
方法等待 AutoResetEvent
變為有信號狀態,然后繼續執行。Thread2Method
方法在休眠1秒后,將 AutoResetEvent
設置為有信號狀態,從而喚醒等待的線程。