私が持っているとしましょうConcurrentDictionary<int, HashSet<int>> sampleCollection;
。操作を実行するのはスレッドセーフですかsampleCollection[1]
(これはHashSet<int>
)?
一般に、スレッド セーフなコレクション内にスレッド セーフでないコレクションがある場合、スレッド セーフでないコレクションをスレッド セーフな外側のコレクションから操作するのはスレッド セーフですか?
私が持っているとしましょうConcurrentDictionary<int, HashSet<int>> sampleCollection;
。操作を実行するのはスレッドセーフですかsampleCollection[1]
(これはHashSet<int>
)?
一般に、スレッド セーフなコレクション内にスレッド セーフでないコレクションがある場合、スレッド セーフでないコレクションをスレッド セーフな外側のコレクションから操作するのはスレッド セーフですか?
HashSet は、安全なデータ構造に集約されていることを知りません。それを見つける方法はありません。その動作を調整することはできません。
HashSet が何らかの形で協力し、このコンステレーションで安全であるように特別にケース化されていたとしても、任意の型に対してそれを想定することはできません。
データ構造とアルゴリズムは、スレッドセーフになるように特別に設計する必要があります。安全であると文書化されていないものはすべて、安全でないと見なされます。
初めて ConcurrentDictionary に入った後にHashSet を変更できる場合、それはスレッドセーフではありません。正解はNoです。