5

スレッドセーフに関して、HashTable と Dictionary に違いはありますか? 何も表示されません... msdnによると、両方とも次のように定義されています:-

ハッシュ表

Hashtable は、複数のリーダー スレッドと 1 つの書き込みスレッドで使用できるスレッド セーフです。スレッドの 1 つだけが書き込み (更新) 操作を実行する場合、マルチスレッドの使用に対してスレッド セーフです。これにより、ライターが Hashtable にシリアル化されている場合、ロックのない読み取りが可能になります。

辞書

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

4

1 に答える 1

13

どちらのクラスも、ロックなしで一度に複数のリーダーを許可します。複数のライターに対しては両方をロックする必要があります。違いは、Hashtable では 1 つのライターと複数のリーダーをロックせずに許可することですが、これは Dictionary では安全ではありません。したがって、Hashtable では書き込みのみをロックする必要があります。キーと値の両方が参照型である場合 (ボックス化/ボックス化解除が必要ない場合)、多数のリーダーと 1 つ (または複数) のライターがあるシナリオでは、Hashtable は Dictionary よりも高速になる可能性があります。これは、リーダーがロックを待機する必要がないためです。全て。Dictionary では、同じシナリオでReaderWriterLockを使用する必要があります。

于 2012-04-21T02:00:34.987 に答える