2012-04-21 15 views
4

スレッドセーフティに関しては、HashTableとDictionaryの間に違いはありますか?私は、任意のを見ていない... MSDNによると、以下のように両方が定義されています -スレッド安全性に関して辞書とハッシュテーブルの相違点

Hashtable

ハッシュテーブルは、複数のリーダースレッドと 単一の書き込みスレッドで使用するためにスレッドセーフです。 スレッドのうちの1つだけが書き込み(更新)操作を実行するとき、マルチスレッドのスレッドセーフです。 は、書き込み側がHashtable にシリアル化されている場合、ロックフリー読み取りが許可されます。

Dictionary

A辞書限りコレクションが変更されないように、同時に を複数のリーダーをサポートすることができます。それでも、コレクションを通じて を列挙することは、本質的にスレッドセーフな手順ではありません。 列挙型が書き込みアクセスと競合するまれなケースでは、列挙全体で コレクションをロックする必要があります。 コレクションに読み取りと書き込みのために複数のスレッドがアクセスできるようにするには、 独自の同期を実装する必要があります。

+3

HashTable =一般的ではありません。使用しないでください。これまで推奨されていません。 –

+0

@KonradRudolph、廃止されたものではありませんが、IMOであるべきです... –

+0

@Thomas正確に。私はそう宣言します。マイクロソフトがなぜこれらのクラスのプラグを引き出していないのか分かりませんが、丁寧な会社では使用しません。 –

答えて

8

両方のクラスでは、一度に複数のリーダーをロックすることなく複数のライターをロックする必要があります。違いは、Hashtableはロックなしで複数のリーダーと一緒にONEライターを許可するのに対し、Dictionaryでは安全ではないということです。ハッシュテーブルでは、書き込みのみをロックする必要があります。キーと値の両方が参照型であるため、Hashtableは多くの読者と1人(またはそれ以上)のライターがいるシナリオでは読者がロックを待つ必要がないため、Dictionaryより速くなりますすべて。辞書では、同じシナリオではReaderWriterLockを使用する必要があります。

関連する問題