2

私が持っているとしましょうConcurrentDictionary<int, HashSet<int>> sampleCollection;。操作を実行するのはスレッドセーフですかsampleCollection[1](これはHashSet<int>)?

一般に、スレッド セーフなコレクション内にスレッド セーフでないコレクションがある場合、スレッド セーフでないコレクションをスレッド セーフな外側のコレクションから操作するのはスレッド セーフですか?

4

3 に答える 3

3

HashSet は、安全なデータ構造に集約されていることを知りません。それを見つける方法はありません。その動作を調整することはできません。

HashSet が何らかの形で協力し、このコンステレーションで安全であるように特別にケース化されていたとしても、任意の型に対してそれを想定することはできません。

データ構造とアルゴリズムは、スレッドセーフになるように特別に設計する必要があります。安全であると文書化されていないものはすべて、安全でないと見なされます。

于 2015-10-07T14:49:31.540 に答える
0

初めて ConcurrentDictionary に入った後にHashSet を変更できる場合、それはスレッドセーフではありません。正解はNoです。

于 2015-10-07T14:49:58.947 に答える