【问题标题】:Lock-Free Data Structures in C++ Compare and Swap RoutineC++ 中的无锁数据结构比较和交换例程
【发布时间】: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 的情况如何,即使它的更改已被该演员覆盖?如果这不可能发生,那为什么呢?

我想相信作者,所以我在这里错过了什么?我想这一定很明显。如果这看起来微不足道,我提前道歉。

【问题讨论】:

    标签: c++ lock-free atomic


    【解决方案1】:

    他正在描述由实现给出的原子操作,“不知何故”。那是在硬件中实现的东西的伪代码。

    【讨论】:

    猜你喜欢
    • 2013-10-27
    • 2011-05-11
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 2017-03-10
    相关资源
    最近更新 更多