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