我想對共享變量執行兩個操作。我需要保證它可以以原子方式完成。可有一個人幫我澄清一下,如果下面的做法是正確的:在共享變量上執行多個原子操作
#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);
}
根據我的理解,索引存儲操作和索引負荷運行要一起發生。一些專家可以在這裏澄清,如果上面的代碼將等同於以下僞代碼:的Visual Studio 2012的
ATOMIC
{
index = (index+1)%10;
}
我一直在C與原子包工作++部分或/和boost ::原子組成部分1.53。
所有的線程都調用'function()'來訪問'index'嗎?或者,他們是否可以自由訪問'索引',但他們想要? – 2013-02-27 18:42:56
增量只能通過所有線程調用'function()'完成。是的,有更多的線程同時訪問'function()'。 – Goutham 2013-02-27 18:51:12