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

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); 「揮発性フィールドへの参照は揮発性として扱われません」という警告が表示されますこれについて何を考えればよいですか?

4
ファイルの追加はUNIXでアトミックですか?
一般に、複数のプロセスからUNIXのファイルに追加する場合、何を当然と見なすことができますか?データを失う可能性はありますか(1つのプロセスが他のプロセスの変更を上書きします)?データが壊れる可能性はありますか?(たとえば、各プロセスが追加ごとに1行をログファイルに追加していますが、2行が破損する可能性はありますか?)上記の意味で追加がアトミックでない場合、相互排除を保証する最良の方法は何ですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.