.NET Framework 4 引入了 System.Collections.Concurrent 命名空間,其中包含多個線程安全且可縮放的集合類。

何時使用線程安全集合
.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> 類
