我有一個HashTable被多個線程訪問。例如讓我們看看三個線程:HashTable併發性
線程A確實Hash.Insert(「a」,new object());線程B做Hash.Insert(「b」,new object());線程C確實是Hash.Insert(「a」,new object());
由於種種原因,我不能使用鎖對整個哈希
我不關心順序或哪個對象將是在過程結束的哈希值。我唯一關心的不是通過從不同線程更新同一個單元而導致數據損壞。
我有什麼選擇?或者它不是問題,HashTable自己處理它並保持數據的完整性。從System.Collections.Concurrent命名空間
ConcurrentDictionary<string, object> Hash = new ConcurrentDictionary<string, object>();
:
「由於某些原因,我無法在整個哈希上使用鎖定」您能否解釋該需求?它只是表現嗎? – CodesInChaos 2012-01-30 08:14:38
@CodeInChaos可以同時有成千上萬的請求,所以我更擔心飢餓,因爲它可能獲得一個線程鎖定永遠不會獲得處理器時間... – 2012-01-30 08:26:02
這是非常不可能的,你會遇到由於非FIFO處理鎖。請參閱http://stackoverflow.com/questions/961869/is-there-a-synchronization-class-that-guarantee-fifo-order-in-c。用於確保FIFO排序的同步對象,這將防止飢餓。 – 2012-01-30 23:04:58