c 集合類的執行緒安全

2021-09-07 00:24:22 字數 1350 閱讀 7158

即位於system.collections命名空間下的集合,如hashtable,arraylist,stack,queue等.其均提供了執行緒同步的乙個實現

與預期結果不同

每種資料型別都包含乙個靜態的synchronized方法,如

arraylist list = arraylist.synchronized(new arraylist(1000000));
調整後的結果

以下為注意點:

issynchronized判斷集合是否為執行緒同步

其內部通過給syncroot屬性加鎖進行同步(即monitor.enter)

這樣的結果顯然好看點.內部實現是在add方法中做鎖定.效果自然不是很好.

其他集合類也是類似的操作

參考: 

可以看到原非泛型集合內部的執行緒同步集合,在每次操作均採用鎖操作,但我們並非每個操作都需要鎖,比如上面的2個執行緒操作.只需要2個鎖就可以了,但使用內部集合的話則需要鎖很多次,帶來了效能問題.在.net 2.0泛型集合中,內部不再支援執行緒同步的集合,即使內部實現了執行緒同步的集合如list的實現也為開發出來,即把lock的這個操作轉嫁給開發者上面了.其實這樣反而可以讓我們更加了解執行緒同步的問題,如果真有需要的話,也可以自己實現乙個了...

C 執行緒安全集合類

本文章僅為個人理解,如有錯誤請指正。從.net 4.0框架開始,在system.collections.concurrent命名空間下,增加了用於多執行緒協同的併發集合類 執行緒安全集合 執行緒安全集合 就是當多執行緒訪問時,採用了加鎖的機制 即當乙個執行緒訪問集合時,會對這個集合進行保護,其他執行...

集合中線程安全的類

集合中線程安全的類有 vector,stack,hashtable,enumeration,除此之外均是非執行緒安全的類與介面 collection是物件集合,collection有兩個子介面 list 和 set,list 可以通過下標 1,2.來取得值,值可以重複,而 set 只能通過游標來取值...

C 執行緒安全的集合

表示物件的執行緒安全的無序集合。static void main string args thlist.trypeek out int result1 獲取末尾的值 console.writeline string.format count result thlist.count,result1 t...