std::atomic<T *>::fetch_add()
分别就对象中存储的地址进行原子化加减。
假设std::atomic<Foo >指向对象数组中的第一项,那么操作X+=3就会使之指向数组第4项。,并返回Foo类型的普通指针。
#include <iostream>
#include <atomic>
#include <assert.h>
class Foo{};
int main() {
Foo some_array[5];
std::atomic<Foo*> p(some_array);
auto x = p.fetch_add(2); // 令p+2 返回旧值
assert(x == some_array);
assert(p.load() == &some_array[2]);
x = (p -= 1); // 令p-1 返回新值
assert(x == &some_array[1]);
assert(p.load() == &some_array[1]);
return 0;
}
这些形式的操作总是服从std::memory_order_seq_cst内存次序
No comments yet.