亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

C#中ManualResetEvent用法

c#
小云
121
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
长沙县| 曲周县| 嵩明县| 会同县| 淅川县| 保亭| 汽车| 临颍县| 诸暨市| 桦川县| 六枝特区| 宝丰县| 赤壁市| 武川县| 晋城| 永胜县| 沙河市| 介休市| 双桥区| 临西县| 九江市| 杭锦旗| 高唐县| 龙井市| 宜良县| 永济市| 太湖县| 商南县| 淮滨县| 西青区| 昌都县| 连南| 桐庐县| 深水埗区| 河南省| 庄浪县| 岢岚县| 龙游县| 四川省| 当涂县| 太仓市|