没有锁或互斥的原子比较

时间:2013-12-12 11:21:35

标签: c++ compare atomic

我正在尝试进行使用原子操作的练习。我想使用compare_exchange对原子数组的位置和原子int进行比较。
我的代码是:

std::array<std::atomic<long int>, 20> xx;
std::atomic<long int> number;

我想这样做:

if (xx[i] > number)
  number = xx[i];

如何在我的案例中使用compare_exchange_weak()?我看了很多次http://en.cppreference.com/w/cpp/atomic/atomic,但我不明白。

1 个答案:

答案 0 :(得分:2)

你做不到。 std::atomic允许对单个对象进行各种原子操作。要执行涉及多个对象的原子操作,您需要锁定。

compare_exchange,正如您的链接所描述的那样,原子地将对象与非原子值进行比较,并根据该比较对其进行更新。它没有比较两个原子值。