繁体   English   中英

C ++中的无锁数据结构比较和交换例程

[英]Lock-Free Data Structures in C++ Compare and Swap Routine

在本文中:无锁数据结构pdf )显示以下“比较和交换”基础:

template <class T>
bool CAS(T* addr, T exp, T val)
{
  if (*addr == exp)
  {
    *addr = val;
    return true;
  }
  return false;
}

然后说

整个过程都是原子的

但那是怎么回事? 是否有可能某些其他参与者可以在if和赋值之间更改addr的值? 在这种情况下,假设所有代码都使用了这个CAS基础,那么下次有什么东西“预期”它是某种特定方式,而事实并非如此。 但是,这并没有改变它可能发生的事实,在这种情况下,它仍然是原子的吗? 如果另一个演员的变化被这个演员覆盖了,那么另一个演员回归真实呢? 如果那不可能发生,为什么呢?

我想相信作者,所以我在这里错过了什么? 我认为这一定是显而易见的。 如果这看起来微不足道,我提前道歉。

他正在描述一个由实现给出的原子操作,“某种程度上”。 这是用硬件实现的伪代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM