C# 编程指南:Concurrent集合

在C#中,Concurrent集合是一组并发安全的集合类型,用于在多线程环境下安全地进行集合操作。这些集合提供了原子性的操作,确保在多个线程同时访问集合时不会发生冲突。

部分
1
ConcurrentQueue<T>
ConcurrentQueue<T>是一个线程安全的先进先出(FIFO)队列。
它提供了Enqueue、TryDequeue和Count等方法,可以在多个线程同时对队列进行操作。
// ConcurrentQueue<T>的使用示例代码

ConcurrentQueue<int> queue = new ConcurrentQueue<int>();

// 在多个线程中同时往队列中添加数据
Parallel.For(0, 10, i =>
{
    queue.Enqueue(i);
});

// 在多个线程中同时从队列中取出数据
Parallel.For(0, 10, i =>
{
    int item;
    if (queue.TryDequeue(out item))
    {
        Console.WriteLine(item);
    }
});

// 输出队列中剩余的元素个数
Console.WriteLine(queue.Count);

在以上示例中,使用ConcurrentQueue<int>创建了一个线程安全的队列。通过Parallel.For方法在多个线程中同时往队列中添加数据,并通过TryDequeue方法在多个线程中同时从队列中取出数据。ConcurrentQueue确保了在并发访问时的线程安全性。

部分
2
ConcurrentStack<T>
ConcurrentStack<T>是一个线程安全的后进先出(LIFO)栈。
它提供了Push、TryPop和Count等方法,可以在多个线程同时对栈进行操作。
// ConcurrentStack<T>的使用示例代码

ConcurrentStack<int> stack = new ConcurrentStack<int>();

// 在多个线程中同时往栈中添加数据
Parallel.For(0, 10, i =>
{
    stack.Push(i);
});

// 在多个线程中同时从栈中取出数据
Parallel.For(0, 10, i =>
{
    int item;
    if (stack.TryPop(out item))
    {
        Console.WriteLine(item);
    }
});

// 输出栈中剩余的元素个数
Console.WriteLine(stack.Count);

在以上示例中,使用ConcurrentStack<int>创建了一个线程安全的栈。通过Parallel.For方法在多个线程中同时往栈中添加数据,并通过TryPop方法在多个线程中同时从栈中取出数据。ConcurrentStack确保了在并发访问时的线程安全性。

部分
3
ConcurrentDictionary<TKey, TValue>
ConcurrentDictionary<TKey, TValue>是一个线程安全的键值对字典。
它提供了TryAdd、TryGetValue、TryUpdate和Count等方法,可以在多个线程同时对字典进行操作。
// ConcurrentDictionary<TKey, TValue>的使用示例代码

ConcurrentDictionary<string, int> dictionary = new ConcurrentDictionary<string, int>();

// 在多个线程中同时往字典中添加键值对
Parallel.For(0, 10, i =>
{
    dictionary.TryAdd($"Key{i}", i);
});

// 在多个线程中同时获取字典中的值
Parallel.ForEach(dictionary, kvp =>
{
    Console.WriteLine($"{kvp.Key}: {kvp.Value}");
});

// 尝试更新字典中的值
dictionary.TryUpdate("Key0", 100, 0);

// 输出字典中剩余的键值对个数
Console.WriteLine(dictionary.Count);

在以上示例中,使用ConcurrentDictionary<string, int>创建了一个线程安全的字典。通过Parallel.For方法在多个线程中同时往字典中添加键值对,并通过Parallel.ForEach方法在多个线程中同时获取字典中的值。ConcurrentDictionary确保了在并发访问时的线程安全性。

    目录

  • 1.
    ConcurrentQueue<T>
  • 2.
    ConcurrentStack<T>
  • 3.
    ConcurrentDictionary<TKey, TValue>