线程安全集合

.NET Framework 4 引入了 System.Collections.Concurrent 命名空间,其中包含多个线程安全且可缩放的集合类。
1

何时使用线程安全集合

.NET Framework 4 新引入了五个专为支持多线程添加和删除操作而设计的集合类型。 为了实现线程安全性,这些新类型使用多种高效的锁定和免锁定同步机制。
需要注意的是,Concurrent命名空间下的类保证线程安全,读写为最新值(不会脏读,不会死锁),并不代表逻辑业务上的线程安全,该用Lock还是要Lock。

参考资料

线程安全集合
何时使用线程安全集合

ConcurrentBag

ConcurrentBag是无序集合,不保证顺序
ConcurrentBag

var random = new Random();
var totalCount = 100;
ConcurrentBag<int> bag = new ConcurrentBag<int>();
Parallel.For(0, totalCount*10, item =>
{
	if(bag.Count<= totalCount)
	{
		bag.Add(item);
	}
});
//有时会超过100个
Console.WriteLine("ConcurrentBag's count is {0}", bag.Count());
int n = 0;
foreach (int i in bag)
{
	if (n > 10)
		break;
	n++;
	//输出结果随机,因为是并行的
	Console.WriteLine("Item[{0}] = {1}", n, i);
}
Console.WriteLine("ConcurrentBag's max item is {0}", bag.Max());

结果

ConcurrentQueue

线程安全队列
ConcurrentQueue

ConcurrentStack

线程安全队列
ConcurrentStack

ConcurrentDictionary

线程安全字典
ConcurrentDictionary<TKey,TValue> 类

示例代码

示例代码

原文地址:https://www.cnblogs.com/Lulus/p/12464548.html