Windows API提供了InterlockedExchange
函数,可原子地设置内存中的值。使用仅有的GCC内建函数,我想要创建一个等效于该函数的函数。将值设置后调用内存障碍是否足够(请参见下面的代码)?
template <typename T>
T InterlockedExchange(volatile T& _data, T _value)
{
const T oldValue = _data;
_data = _value;
__sync_synchronize();
return oldValue;
}
谢谢。
编辑: 提供的代码片段不是解决问题的正确方案,因为它显然不具有原子性(但是,好吧,至少我要尝试一下)。
_data
参数声明为引用,但后来使用指针解引用访问它。 - Some programmer dude