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

溫馨提示×

c# autoresetevent的使用場景

c#
小樊
81
2024-11-18 11:06:11
欄目: 編程語言

AutoResetEvent 是 C# 中的一個同步原語,它允許多個線程在一個或多個線程中等待某個條件成立。當條件滿足時,AutoResetEvent 會自動重置其狀態,以便其他等待的線程可以繼續執行。AutoResetEvent 的使用場景主要包括以下幾種:

  1. 線程同步:當你需要在多個線程之間同步操作時,可以使用 AutoResetEvent。例如,當一個線程完成某項任務后,通知其他等待的線程繼續執行。
AutoResetEvent event1 = new AutoResetEvent(false);

// 工作線程
Thread workerThread = new Thread(() =>
{
    // 執行任務
    Thread.Sleep(1000);

    // 任務完成后,設置事件,喚醒等待的線程
    event1.Set();
});

workerThread.Start();

// 主線程
event1.WaitOne(); // 等待工作線程完成任務
Console.WriteLine("任務已完成");
  1. 限制并發訪問:當你需要限制對共享資源的并發訪問時,可以使用 AutoResetEvent。例如,當一個線程正在訪問共享資源時,其他線程需要等待該線程釋放資源。
AutoResetEvent event2 = new AutoResetEvent(true);
object lockObject = new object();

// 工作線程
Thread workerThread = new Thread(() =>
{
    event2.WaitOne(); // 等待主線程釋放鎖

    lock (lockObject)
    {
        // 訪問共享資源
        Console.WriteLine("訪問共享資源");
    }

    event2.Set(); // 釋放鎖,喚醒等待的線程
});

workerThread.Start();

// 主線程
lock (lockObject)
{
    Console.WriteLine("訪問共享資源");
}

event2.Set(); // 釋放鎖,喚醒等待的線程
  1. 生產者-消費者模式:在生產者-消費者模式中,AutoResetEvent 可以用于在生產者和消費者之間傳遞消息。生產者生產數據后,通過設置 AutoResetEvent 通知消費者;消費者消費數據前,需要等待生產者設置 AutoResetEvent
AutoResetEvent event3 = new AutoResetEvent(false);
Queue<int> queue = new Queue<int>();

// 生產者線程
Thread producerThread = new Thread(() =>
{
    for (int i = 0; i < 10; i++)
    {
        queue.Enqueue(i);
        event3.Set(); // 通知消費者
        Thread.Sleep(100);
    }
});

producerThread.Start();

// 消費者線程
Thread consumerThread = new Thread(() =>
{
    while (true)
    {
        event3.WaitOne(); // 等待生產者通知

        int item;
        if (queue.TryDequeue(out item))
        {
            Console.WriteLine($"消費數據: {item}");
        }
    }
});

consumerThread.Start();

producerThread.Join();
consumerThread.Join();

總之,AutoResetEvent 是一個非常有用的同步原語,可以幫助你在多線程編程中實現線程同步、限制并發訪問以及生產者-消費者模式等場景。

0
江城| 齐齐哈尔市| 东丰县| 福建省| 扶绥县| 和田市| 巫山县| 尖扎县| 会泽县| 东台市| 交口县| 德保县| 和顺县| 孟州市| 科技| 肇庆市| 盖州市| 新津县| 柏乡县| 濮阳市| 贵州省| 精河县| 杭锦后旗| 丰顺县| 许昌市| 忻城县| 武陟县| 政和县| 乌兰浩特市| 鄢陵县| 星子县| 文安县| 民乐县| 屯昌县| 大关县| 建阳市| 宜兰县| 泰州市| 云南省| 偏关县| 淮滨县|