2010-01-21 41 views
6

是否有任何可用的Hashtable實現,在.NET中提供最小的鎖定時提供線程安全性?或者使用另一種可以移植到.NET的語言?最小鎖定線程安全哈希表?

我們正在使用BCL詞典<> class with lock()和像memcached或Velocity這樣的分佈式緩存應用程序來尋找一些東西。

預期用途是一個緩存,其中有成千上萬的讀者根據鍵(數字或指令,我們還沒有決定)讀出不可變的值。將會有更少的作家,可能只有一個。

+0

請定義「線程安全」的含義。比照http://blogs.msdn.com/ericlippert/archive/2009/10/19/what-is-this-thing-you-call-thread-safe.aspx – jason 2010-01-21 16:49:58

+0

描述您的使用場景也許會有幫助。你打算混合插入/查找/刪除還是將他們分組在一起?所有的操作是從多個線程訪問的,還是隻有某些線程? – Dolphin 2010-01-21 16:52:41

回答

4

從.Net 4.0開始,有ConcurrentDictionary。這是一個hashtable風格的結構,意味着在多線程之間的高性能使用。它的使用和實施

詳細信息可以在這裏找到:

+0

這看起來不像一個鍵可以索引的;即沒有「O(1)」方法來獲得特定的鍵控值。 ConcurrentBag似乎對生產者/消費者場景更有用。也許你的意思是'ConcurrentDictionary '(http://msdn.microsoft.com/en-us/library/dd287191(VS.100).aspx)? – jason 2010-01-21 16:52:34

+0

當然你的意思是ConcurrentDictionary? http://msdn.microsoft.com/en-us/library/dd287191(VS.100).aspx – 2010-01-21 16:53:59

+0

@Jason,@Michael謝謝,是的,我的意思是ConcurrentDictionary。我最好的藉口是它早,我在喝咖啡之前就已經在喝咖啡了。 – JaredPar 2010-01-21 16:55:18

1
+0

基於ReaderWriterLockSlim的字典看起來正如我所要求的 - 更有效的鎖定。直接鏈接: http://devplanet.com/blogs/brianr/archive/2008/09/26/thread-safe-dictionary-in-net.aspx 同步哈希表正是我想要避免的,簡單鎖定()所有訪問權限。 – 2010-01-21 17:51:07

+0

你會使用它還是等待.Net 4 ConcurrentDictionary? – 2010-01-23 00:13:55