3

在本文:无锁数据结构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 回答