同期との関係を理解するのに助けが必要です。理解しようとしている例を読めば読むほど、何も理解していないと感じます。時々、これだ、わかった、と感じることがありますが、別の例を見ると、また混乱してしまいます。それを正しくするのを手伝ってください。
操作 A が操作 B と同期するのは、A が解放セマンティクスを使用したアトミック変数 m へのストアであり、B が取得セマンティクスを使用した同じ変数 m からのロードであり、B が A によって格納された値を読み取る場合です。また、次の場合、操作 A は操作 B の前に発生するとも言います。
- A が B と同じスレッドで実行され、A がプログラム順序で B の前にある、または
- A が B と同期する、または
- A は他の操作 C の前に発生し、C は B の前に発生します
わかった。この例を見ると
thread0 実行 | スレッド1が実行します
x ストア (リリース) | x をロード (取得)
x here へのストアは、x からのロードと同期しますか? ここで同期との関係がある場合、x へのストアは x からのロードの前に発生するため、スレッド 0 で x へのストアの前にシーケンス処理されたものはすべて、スレッド 1 の x からのロードの前に発生します。これは、ここで強制的な順序付けがあることを意味します。そうですか?しかし、この場合、定義の「およびBがAによって格納された値を読み取る」部分が何を意味するのかわかりませんか? スレッド 1 がスレッド 0 よりも速い場合、古い値を読み取る可能性があります。では、ここでの関係はどのようなもので、何か関係があるのでしょうか? 存在しない場合、どうすればその関係を提供できますか?
前もって感謝します。