中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

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
连江县| 靖远县| 郴州市| 定兴县| 邵东县| 澄迈县| 桃园市| 双辽市| 建平县| 吉木萨尔县| 额济纳旗| 山阳县| 都昌县| 石河子市| 宣恩县| 安新县| 台前县| 威远县| 介休市| 闽侯县| 平江县| 钦州市| 扎囊县| 甘肃省| 子长县| 石棉县| 中宁县| 镇巴县| 天等县| 微山县| 德惠市| 麻江县| 钟祥市| 特克斯县| 华阴市| 来凤县| 肥东县| 读书| 临沂市| 略阳县| 屯门区|