3

この論文: 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 を返すのはどうですか? もしそれが起こりえないとしたら、それはなぜですか?

著者を信じたいのですが、ここで何が欠けていますか? 私はそれが明らかでなければならないと考えています。これが些細なことのように思われる場合は、事前にお詫び申し上げます。

4

1 に答える 1

7

彼は、実装によって「なんとかして」与えられるアトミック操作について説明しています。これは、ハードウェアに実装されたものの擬似コードです。

于 2010-04-27T22:58:00.120 に答える