我想对一个共享变量做两个操作。我需要保证它可以原子地完成。有人可以帮助我澄清以下方法是否正确:
#include <atomic>
std::atomic<int> index;
void function()
{
// I need the variable index to be incremented but bound in the
// range of [0,9].
int loc_indx = index.load(std::memory_order_acquire);
index.store( (loc_indx+1)%10 , std::memory_order_release);
}
根据我的理解,索引存储操作和索引加载操作必须一起发生。这里的一些专家能否澄清上述代码是否等同于以下伪代码:
ATOMIC
{
index = (index+1)%10;
}
我一直在 Visual Studio 2012 的 c++ 部分或/和 1.53 的 boost::atomic 部分中使用 atomic 包。