91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

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
荔浦县| 富宁县| 黑山县| 东兴市| 合肥市| 太谷县| 丰都县| 都昌县| 九寨沟县| 依兰县| 锦州市| 台前县| 邢台市| 甘谷县| 绥芬河市| 娄底市| 景东| 木里| 孝义市| 进贤县| 会昌县| 绥江县| 巴马| 渭南市| 雅江县| 凌云县| 美姑县| 桃园市| 宣汉县| 屏南县| 裕民县| 甘孜县| 阿鲁科尔沁旗| 大荔县| 晋江市| 内丘县| 襄樊市| 鹿泉市| 绵竹市| 文化| 阿拉善右旗|