【发布时间】:2012-01-06 06:47:27
【问题描述】:
Windows API 提供InterlockedExchange,它以原子方式在内存中设置一个值。仅使用 GCC 内部函数,我想创建一个与该函数等效的函数。设置值然后调用内存屏障就足够了(参见下面的代码)?
template <typename T>
T InterlockedExchange(volatile T& _data, T _value)
{
const T oldValue = _data;
_data = _value;
__sync_synchronize();
return oldValue;
}
谢谢。
编辑:建议的 sn-p 不是解决问题的正确方法,因为它显然不是原子的(但是,我不得不试一试至少)。
【问题讨论】:
-
您将
_data参数声明为引用,但稍后使用指针解引用访问它。