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

溫馨提示×

C# ManualResetEvent怎樣實現線程同步

c#
小樊
82
2024-10-12 07:34:57
欄目: 編程語言

ManualResetEvent 是 C# 中用于線程同步的一個類。它允許一個或多個線程等待,直到另一個線程設置事件。ManualResetEvent 有兩種狀態:SetReset。當事件處于 Set 狀態時,等待的線程會被釋放;當事件處于 Reset 狀態時,線程需要繼續等待。

下面是一個使用 ManualResetEvent 實現線程同步的示例:

using System;
using System.Threading;

class Program
{
    static ManualResetEvent _event = new ManualResetEvent(false); // 創建一個初始值為 false 的 ManualResetEvent

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

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

        // 讓線程1完成工作后設置事件
        _event.Set();

        thread1.Join();
        thread2.Join();
    }

    static void DoWork()
    {
        Console.WriteLine("線程1開始工作...");

        // 等待事件被設置
        _event.WaitOne();

        Console.WriteLine("線程1繼續工作...");
        Console.WriteLine("線程1完成工作...");
    }
}

在這個示例中,我們創建了兩個線程 thread1thread2,它們都執行 DoWork 方法。在 DoWork 方法中,我們使用 _event.WaitOne() 讓線程等待事件被設置。在 Main 方法中,我們首先啟動兩個線程,然后在適當的時候調用 _event.Set() 設置事件,以便線程可以繼續執行。

需要注意的是,ManualResetEvent 在使用完后應該被釋放。你可以在程序結束時調用 _event.Dispose() 方法來釋放事件。在上面的示例中,我們在 thread1thread2 都完成后調用了 Join() 方法,確保主線程在所有子線程完成后才退出。這樣可以避免因為子線程仍在運行而導致資源無法釋放的問題。

0
托克托县| 胶州市| 桃江县| 台湾省| 琼结县| 亳州市| 永善县| 泰宁县| 双流县| 定兴县| 仙游县| 监利县| 陆良县| 囊谦县| 手机| 土默特左旗| 申扎县| 尚义县| 肃宁县| 武强县| 巨鹿县| 收藏| 班玛县| 黔西县| 安乡县| 南昌县| 正蓝旗| 璧山县| 东山县| 陕西省| 宿松县| 山阳县| 晋中市| 宣汉县| 行唐县| 兴山县| 聂荣县| 太原市| 盘山县| 昌邑市| 福海县|