C++11 在更高版本的c+的fetch#XXX函数中正确使用内存(顺序)获取/释放+;11

C++11 在更高版本的c+的fetch#XXX函数中正确使用内存(顺序)获取/释放+;11,c++11,std,atomic,data-acquisition,memory-barriers,C++11,Std,Atomic,Data Acquisition,Memory Barriers,我在下面的某个类中找到了一个代码 std::atomic<bool> is_locked(false); std::atomic<int> counter(0); bool acquire(){ counter.fetch_add(1,memory_order_acquire); if(is_locked.load(memory_order_acquire)) { return false; } retur

我在下面的某个类中找到了一个代码

std::atomic<bool> is_locked(false);
std::atomic<int> counter(0);

bool acquire(){
    counter.fetch_add(1,memory_order_acquire);
    if(is_locked.load(memory_order_acquire))
    { 
           return false;
    }
    return true;
}
std::原子被锁定(false);
std::原子计数器(0);
bool acquire(){
计数器。获取\添加(1,内存\顺序\获取);
如果(已锁定。加载(内存顺序获取))
{ 
返回false;
}
返回true;
}
我认为“内存顺序获取”与读取操作一起使用。 所以我理解了load(内存\顺序\获取)的功能

但是,fetch_add实际上包含两个函数:

1) 读取当前值

2) 写新的附加值

在这个类中还存在一个函数,该函数包含“计数器”的fetch_子函数以及内存顺序释放

在fetch\u add中获取内存顺序和在fetch\u sub中释放内存顺序的意图是什么??
难道不能在fetch\u add中使用memory\u order\u release吗?

Jeff Preshing的可能副本就此发表了许多伟大的文章。这里有一些上下文可以帮助您