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

溫馨提示×

c# blockingcollection如何實現線程安全

c#
小樊
81
2024-11-21 05:36:10
欄目: 編程語言

BlockingCollection 是 .NET 集合框架中提供的一個線程安全的集合類,它可以用于在多線程環境下存儲和傳遞數據。它提供了 AddTakeTryTake 等方法,這些方法都是線程安全的。下面是一個簡單的示例,展示了如何使用 BlockingCollection 實現線程安全的數據傳遞:

using System;
using System.Collections.Concurrent;
using System.Threading;

class Program
{
    static BlockingCollection<int> _blockingCollection = new BlockingCollection<int>();

    static void Producer()
    {
        for (int i = 0; i < 10; i++)
        {
            _blockingCollection.Add(i);
            Console.WriteLine($"Produced: {i}");
            Thread.Sleep(1000); // 模擬生產數據所需的時間
        }

        // 生產完成后,通知消費者
        _blockingCollection.CompleteAdding();
    }

    static void Consumer()
    {
        foreach (var item in _blockingCollection.GetConsumingEnumerable())
        {
            Console.WriteLine($"Consumed: {item}");
            Thread.Sleep(2000); // 模擬消費數據所需的時間
        }
    }

    static void Main(string[] args)
    {
        Thread producerThread = new Thread(Producer);
        Thread consumerThread = new Thread(Consumer);

        producerThread.Start();
        consumerThread.Start();

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

在這個示例中,我們創建了一個 BlockingCollection<int> 實例,并啟動了兩個線程:一個生產者線程和一個消費者線程。生產者線程將數據添加到集合中,而消費者線程從集合中獲取數據。BlockingCollectionAddGetConsumingEnumerable 方法都是線程安全的,因此我們不需要額外的同步措施。

注意,當生產者線程完成數據添加后,需要調用 CompleteAdding 方法通知消費者線程不再有新的數據添加。這樣,消費者線程在遍歷集合時就不會一直等待新數據。

0
甘南县| 南华县| 通渭县| 苍山县| 铜陵市| 平乐县| 赞皇县| 黄梅县| 丰县| 金沙县| 安阳市| 伊宁市| 万州区| 山阴县| 高安市| 江津市| 陇西县| 喀喇沁旗| 漳平市| 儋州市| 团风县| 乡城县| 遵义市| 华坪县| 沂南县| 托克托县| 昆山市| 旅游| 华阴市| 莱州市| 永清县| 尼木县| 焦作市| 鄂托克前旗| 泸水县| 武穴市| 社会| 山东省| 嘉兴市| 合江县| 绍兴县|