12

複数のスレッドからアクセスできる readonly-dictionary を探しています。ConcurrentDictionary はそのような機能を公開していますが、オーバーヘッドと奇妙な API は必要ありません。

.Net 4.5 でこのようなクラスを提供している間、ドキュメントには静的呼び出しのみが安全であると記載されています。

なぜだろう?

4

1 に答える 1

14

ReadOnlyDictionary他の辞書の単なるラッパーです。そのため、基になるディクショナリと同じくらいスレッドセーフです。

特に、別のスレッドがラッパーから読み取っているときに、基になる辞書を変更するスレッドがある場合、安全性は保証されません。

あらゆるReadOnlyDictionary角度から事実上不変である が必要な場合は、元の辞書のクローンを作成し、その周りにラッパーを作成してから、クローンへの参照をどこにも保持しないでください。読み取り操作のみが行われているため、スレッドセーフにする必要があります。もちろん、キーまたは値の型が変更可能である場合は、2 段階目の「スレッドの安全性」を心配する必要があります。ReadOnlyDictionary

于 2012-12-03T13:25:58.097 に答える