0

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

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;
}

我认为“memory_order_acquire”与读取操作一起使用。所以我理解了加载(memory_order_acquire)的功能。

但是, fetch_add 实际上由两个函数组成:

1) 读取当前值

2)写入新的附加值

在此类中还存在一个函数,该函数将 fetch_sub 函数包含到带有 memory_order_release 的“计数器”中。

fetch_add 中的 memory_order_acquire 和 fetch_sub 中的 memory_order_release 的意图是什么?难道不能在 fetch_add 中使用 memory_order_release 吗?

4

0 回答 0