溫馨提示×

C#中ManualResetEvent用法

c#
小云
139
2023-08-05 17:48:16
欄目: 編程語言

在C#中,ManualResetEvent是一個線程同步的工具,用于控制多線程之間的同步操作。下面是ManualResetEvent的基本用法:

  1. 初始化ManualResetEvent對象:
ManualResetEvent mre = new ManualResetEvent(false);

這里的參數false表示初始狀態為非終止狀態,即阻塞線程。

  1. 線程等待ManualResetEvent信號:
mre.WaitOne();

當線程執行到這里時,如果ManualResetEvent的狀態是非終止狀態,則線程會被阻塞,直到ManualResetEvent收到信號。

  1. 發送信號給等待的線程:
mre.Set();

當某個線程調用Set()方法后,ManualResetEvent的狀態變為終止狀態,并且所有正在等待的線程會被喚醒。

  1. 重置ManualResetEvent狀態:
mre.Reset();

調用Reset()方法將ManualResetEvent的狀態重置為非終止狀態。

需要注意的是,ManualResetEvent可以在多個線程之間進行同步操作。如果有多個線程在等待ManualResetEvent的信號,當ManualResetEvent收到信號后,所有等待的線程都會被喚醒。此外,ManualResetEvent還提供了一個WaitOne方法的重載版本,可以指定等待的超時時間。

下面是一個示例,演示了如何使用ManualResetEvent實現線程的同步操作:

class Program
{
static ManualResetEvent mre = new ManualResetEvent(false);
static void Main(string[] args)
{
Thread t1 = new Thread(Worker1);
Thread t2 = new Thread(Worker2);
t1.Start();
t2.Start();
Thread.Sleep(2000); // 等待一段時間
mre.Set(); // 發送信號給等待的線程
Console.ReadKey();
}
static void Worker1()
{
Console.WriteLine("Worker1開始等待...");
mre.WaitOne(); // 等待信號
Console.WriteLine("Worker1收到信號,繼續執行...");
}
static void Worker2()
{
Console.WriteLine("Worker2開始等待...");
mre.WaitOne(); // 等待信號
Console.WriteLine("Worker2收到信號,繼續執行...");
}
}

在上面的示例中,Worker1和Worker2線程都會等待ManualResetEvent的信號。在Main方法中,我們等待一段時間后通過mre.Set()方法發送信號給等待的線程。然后Worker1和Worker2線程會被喚醒并繼續執行后續的代碼。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女