タグ付けされた質問 「volatility」

4
参照割り当てはアトミックなので、なぜInterlocked.Exchange(ref Object、Object)が必要なのですか?
私のマルチスレッドasmx Webサービスでは、少数で構成され、としてマークされた独自のタイプSystemDataのクラスフィールド_allDataがList<T>ありDictionary<T>ましたvolatile。システムデータ(_allData)はたまに更新され、別のオブジェクトを作成してそれを実行し、newDataそのデータ構造に新しいデータを入力します。完了したら、割り当てます private static volatile SystemData _allData public static bool LoadAllSystemData() { SystemData newData = new SystemData(); /* fill newData with up-to-date data*/ ... _allData = newData. } 割り当てはアトミックであり、古いデータへの参照を持つスレッドはそれを使い続け、残りは割り当て直後に新しいシステムデータを持つため、これは機能するはずです。ただし、私の同僚は、volatileキーワードと単純な割り当てを使用する代わりにInterLocked.Exchange、一部のプラットフォームでは参照割り当てがアトミックであることが保証されていないため、使用する必要があると述べました。さらに、the _allDataフィールドをとして宣言volatileすると Interlocked.Exchange<SystemData>(ref _allData, newData); 「揮発性フィールドへの参照は揮発性として扱われません」という警告が表示されますこれについて何を考えればよいですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.