線程安全集合


.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> 類

示例代碼

示例代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM