共有変数に対して 2 つの操作を実行したいと考えています。アトミックに実行できることを保証する必要があります。次のアプローチが正しいかどうかを明確にするのに役立つ人がいます:
#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 部分でアトミック パッケージを使用してきました。