slf*_*slf 3 c++ lock-free atomicity
在本文中:无锁数据结构(pdf)显示以下"比较和交换"基础:
template <class T>
bool CAS(T* addr, T exp, T val)
{
if (*addr == exp)
{
*addr = val;
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
然后说
整个过程都是原子的
但那是怎么回事?是否有可能其他一些演员可以改变作业和作业addr之间的价值if?在这种情况下,假设所有代码都使用了这个CAS基础,那么下次有什么东西"预期"它是某种特定方式,而事实并非如此.但是,这并没有改变它可能发生的事实,在这种情况下,它仍然是原子的吗?如果另一个演员的变化被这个演员覆盖了,那么另一个演员回归真实呢?如果那不可能发生,为什么呢?
我想相信作者,所以我在这里错过了什么?我认为这一定是显而易见的.如果这看起来微不足道,我提前道歉.