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内存次序