2010-01-21 17 views
6

Czy istnieją jakieś dostępne implementacje tabeli Hashtable, które zapewniają bezpieczeństwo wątków przy minimalnym blokowaniu w .NET? Lub w innym języku, który można przenieść do .NET?Minimalna blokada hashtable wątku?

Szukamy czegoś pomiędzy Słownikiem BCL <,> klasą z blokadą() i rozproszoną aplikacją do buforowania, taką jak memcached lub Velocity.

Zamierzeniem jest pamięć podręczna z tysiącami czytników odczytujących wartości niezmienne na podstawie kluczy (liczb lub przewodników, jeszcze nie zdecydowaliśmy, które). Będzie mniej pisarzy, być może tylko jeden.

+0

Proszę określić, co masz na myśli przez "wątek bezpieczny". cf. http://blogs.msdn.com/ericlippert/archive/2009/10/19/what-is-this-thing-you-call-thread-safe.aspx – jason

+0

Pomocne może być również opisanie scenariusza użycia. Zamierzasz miksować wstawianie/szukanie/usuwanie, czy też w jakiś sposób zostaną zgrupowane? Czy wszystkie operacje będą dostępne z wielu wątków lub tylko niektórych? – Dolphin

Odpowiedz

4

Począwszy od .Net 4.0 jest ConcurrentDictionary. Jest to struktura stylu hashtable przeznaczona do wysokiej wydajności użycia wielu wątków.

Szczegóły na jego stosowania i wdrażania można znaleźć tutaj:

+0

To nie wygląda na to, że można je indeksować za pomocą klucza; tj. nie ma sposobu "O (1)", aby uzyskać określoną wartość kluczowania. 'ConcurrentBag' wydaje się bardziej przydatny w scenariuszach producenta/konsumenta. Może miałeś na myśli 'ConcurrentDictionary ' (http://msdn.microsoft.com/en-us/library/dd287191(VS.100).aspx)? – jason

+0

Na pewno masz na myśli ConcurrentDictionary? http://msdn.microsoft.com/en-us/library/dd287191(VS.100).aspx –

+0

@Jason, @Michael dzięki, tak, miałem na myśli ConcurrentDictionary. Moją najlepszą wymówką jest to, że jest wcześnie i mam przed sobą SO, zanim wypiłem kawę. – JaredPar

1

W What's the best way of implementing a thread-safe Dictionary? Brian Rudolf dzieli link do słownika bezpieczny wątku, który używa ReaderWriterLockSlim: http://devplanet.com/blogs/brianr/archive/2008/09/26/thread-safe-dictionary-in-net.aspx.

Możesz również spojrzeć na zsynchronizowaną tablicę skrótu: http://msdn.microsoft.com/en-us/library/system.collections.hashtable.aspx.

+0

Słownik oparty na ReadWorkLockSlim wygląda dokładnie to, o co prosiłem - bardziej efektywne blokowanie. Bezpośredni link: http://devplanet.com/blogs/brianr/archive/2008/09/2/2/thread-safe-dictionary-in-net.aspx Synchronizowana Hashtable jest dokładnie tym, czego starałem się uniknąć, proste lock() przy każdym dostępie. –

+0

Używasz tego lub czekasz na .Net 4 ConcurrentDictionary? –