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

溫馨提示×

C#學習之ManualResetEvent的理解和使用

c#
小億
130
2024-01-09 08:54:28
欄目: 編程語言

ManualResetEvent 是一個用于線程同步的類,它允許一個或多個線程等待,直到某個事件發生。它有兩個狀態:已觸發和未觸發。當事件處于未觸發狀態時,所有等待的線程將被阻塞,直到事件被手動觸發。當事件處于已觸發狀態時,等待的線程將被喚醒,繼續執行。

以下是 ManualResetEvent 的主要方法和屬性:

  • Set():將事件狀態設置為已觸發,喚醒所有等待的線程。
  • Reset():將事件狀態設置為未觸發。
  • WaitOne():等待事件的觸發,如果事件已經觸發,則立即返回;否則,線程將被阻塞,直到事件被觸發。
  • WaitOne(timeout):等待事件的觸發,如果事件已經觸發,則立即返回;否則,線程將被阻塞,直到事件被觸發或者超時。

以下是一個使用 ManualResetEvent 的示例:

using System;
using System.Threading;

class Program
{
    static ManualResetEvent manualResetEvent = new ManualResetEvent(false);

    static void Main(string[] args)
    {
        Thread thread1 = new Thread(Work);
        Thread thread2 = new Thread(Work);

        thread1.Start();
        thread2.Start();

        // 等待一段時間
        Thread.Sleep(2000);

        // 觸發事件,喚醒等待的線程
        manualResetEvent.Set();

        // 等待線程執行完畢
        thread1.Join();
        thread2.Join();

        Console.WriteLine("All threads completed.");
        Console.ReadLine();
    }

    static void Work()
    {
        Console.WriteLine("Thread {0} waiting.", Thread.CurrentThread.ManagedThreadId);

        // 等待事件的觸發
        manualResetEvent.WaitOne();

        Console.WriteLine("Thread {0} resumed.", Thread.CurrentThread.ManagedThreadId);
    }
}

在上面的示例中,我們創建了兩個工作線程 thread1 和 thread2,并且讓它們等待 manualResetEvent 事件的觸發。在主線程中,我們等待了 2 秒鐘后,手動觸發了 manualResetEvent 事件。這樣,兩個工作線程就被喚醒,繼續執行,并最終輸出 “All threads completed.”。

ManualResetEvent 在多線程編程中非常有用,可以實現線程之間的同步和協調。需要注意的是,一旦 ManualResetEvent 被觸發,它會一直保持觸發狀態,直到我們調用 Reset() 方法將其重置為未觸發狀態。

0
贡觉县| 宁南县| 府谷县| 厦门市| 拜泉县| 延寿县| 武川县| 榆中县| 新巴尔虎右旗| 迁西县| 丁青县| 肇州县| 桓仁| 台州市| 思茅市| 奈曼旗| 徐汇区| 太白县| 黑河市| 肥城市| 资阳市| 织金县| 沙河市| 濉溪县| 四会市| 郧西县| 泰兴市| 民县| 黑龙江省| 襄垣县| 涿州市| 边坝县| 齐河县| 北宁市| 云南省| 东阿县| 怀柔区| 汉阴县| 固镇县| 板桥市| 饶河县|