volatile
キーワードで変数を宣言すると、スレッドセーフな状態になりますか、場合によってはInterlocked
クラスまたはlock
ステートメントでアクセスする必要がありますか?アクセシビリティの揮発性変数
-1
A
答えて
2
volatile
キーワードは、完全にmemory barrierを挿入するだけで、CPUパイプライン上のすべての読み書き可能命令が確実に実行されます。エンドユーザにとって、他のスレッドでの可視性は保証されます。なぜなら、書き込みが完了すると、結果はCPUのキャッシュ(および必要に応じてRAM)にプッシュされるからです。最近のインテルCPUでこのアプリを実行している間は、これに気を付けるべきではありません。明示的な指示を追加することなく、読み取りと書き込みの障壁を保証します。
一方、Interlocked
は、指定されたメモリアドレスでCPUバスをロックし、変数に対してアトミック操作を実行できるため、同じメモリアドレスで他のCPUコアが他の読み書き操作を実行することはできません時間。これらのアトミック操作は、実際にはx86 CPUアーキテクチャーファミリーと呼ばれる命令です。そのため、限られた量の操作(追加、増分、減分、交換、比較交換)があります。
volatile
とInterlocked
の両方がCPU機能に関連していますが、クリティカルセクション、スピンロック、ミューテックス、セマフォ、自動/手動リセットイベントなどの一般的な同期プリミティブがその上に構築されています。
関連する問題
- 1. 揮発性変数
- 2. は揮発性の変数ですか?
- 3. asp.netの不揮発性グローバル変数
- 4. 揮発性の変数をキャストする
- 5. 未使用の揮発性変数
- 6. 揮発性のconst、揮発性レジスタ、C++での揮発性の静的
- 7. 揮発性変数によるピルトバックバックエラー
- 8. エクセルVBAスタティック(不揮発性)変数 - ユーザーフォーム
- 9. は、揮発性
- 10. 揮発性変数とポインタ変数の相違点
- 11. arduinoスレッドの揮発性変数の変更
- 12. スカラ:不揮発性
- 13. 揮発性同等
- 14. 揮発性のconstポインタ
- 15. C#の非揮発性オブジェクト
- 16. C++の揮発性クラスメンバー
- 17. C中の揮発性
- 18. cortex-m3で64ビットの揮発性変数を読み取る
- 19. 揮発性変数には同期アクセスが必要ですか?
- 20. gcc:__sync_lock_test_and_set VS。 =揮発性変数を持つ演算子
- 21. 揮発性原子変数によるアトミック演算
- 22. 揮発性(時間依存)変数は存在しますか?
- 23. 揮発性変数と同期化されたセッターとゲッター
- 24. 揮発性int変数をextern intとして定義する
- 25. なぜ揮発性変数は通常非公開ですか?
- 26. 揮発性EquivalenceClassにはsortref
- 27. ビュー対揮発性テーブル?
- 28. C#で揮発性とThread.MemoryBarrier
- 29. スレッドセーフ(揮発性なし)
- 30. 揮発性オブジェクトが不揮発性メンバ関数を呼び出すことができない理由
'volatile'は何らかの最適化を妨げますhttps://msdn.microsoft.com/en-us/library/x13ttww7.aspx" ... volatile宣言されたフィールドは、コンパイラの最適化の対象にはなりません。シングルスレッド... "; 'volatile'は銀色の弾丸ではなく、あなたは" ...インターロックされたクラスまたはロックステートメントを使ってそれにアクセスする必要がある " –