私は現在並行性を研究していますが、いくつか疑問があります。
ウィキの例を見てみましょう。 http://en.wikipedia.org/wiki/Atomic_(computer_science)
素朴で非アトミックな方法では、値を読み取り、1 を加算してから書き戻します。2 つのプロセスが同時に実行されている場合、ステップが互いにインターリーブすることがあります。たとえば、最初のプロセスは 1 を読み取って追加しますが、中断されます。2 番目のプロセスは読み取り、1 の追加、および書き戻しを行い、中断されます。最初のプロセスが再開され、古い値が書き戻されます。
アトミックな比較と交換がどのように問題を解決するかを理解しています。読み取り、1 を追加し、比較とスワップを使用して書き込み、比較とスワップが失敗した場合は再試行します。
ただし、複数のスレッドを実行する複数のコアがあるシナリオを想像しています。1 番目のプロセスと 2 番目のプロセスが異なるコアでまったく同時に実行されるとどうなりますか? つまり、CPU1 の Process1 は、読み取り、追加、比較および交換を行い、同時に CPU2 の Process2 は読み取り、追加、比較および交換を行います。コンペアアンドスワップも成功すると思います。
この状況は可能ですか?もしそうなら、それはどのように扱われますか?