この論文: Lock-Free Data Structures ( pdf ) では、次の「比較と交換」の基本が示されています。
template <class T>
bool CAS(T* addr, T exp, T val)
{
if (*addr == exp)
{
*addr = val;
return true;
}
return false;
}
そして、言う
手順全体がアトミックです
しかし、それはどうしてですか?addr
他のアクターが と の間での値を変更する可能性はありませんif
か? その場合、すべてのコードがこの CAS の基本を使用していると仮定すると、次に何かが特定の方法であると「期待」したときに、そうではなかったことがわかります。ただし、それが発生する可能性があるという事実は変わりません。その場合、それはまだアトミックですか? 変更がこのアクターによって上書きされた場合でも、他のアクターが true を返すのはどうですか? もしそれが起こりえないとしたら、それはなぜですか?
著者を信じたいのですが、ここで何が欠けていますか? 私はそれが明らかでなければならないと考えています。これが些細なことのように思われる場合は、事前にお詫び申し上げます。