【发布时间】:2010-04-27 22:56:49
【问题描述】:
在本文中: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;
}
然后说
整个过程是原子的
但这是怎么回事?其他演员不可能在if 和分配之间更改addr 的值吗?在这种情况下,假设所有代码都使用这个 CAS 基础,那么下一次“预期”它会以某种方式出现时会发现它,但事实并非如此。但是,这并没有改变它可能发生的事实,在这种情况下,它仍然是原子的吗?其他演员返回 true 的情况如何,即使它的更改已被该演员覆盖?如果这不可能发生,那为什么呢?
我想相信作者,所以我在这里错过了什么?我想这一定很明显。如果这看起来微不足道,我提前道歉。
【问题讨论】: