我正在尝试将一些 Java 代码移植到 Windows C++ 并且对如何实现AtomicLong.lazySet()
. 我能找到的唯一信息是关于它的作用,而不是如何实现它,并且可用的源代码最终位于 Sun ( sun.misc.Unsafe.class
) 拥有的私有本地库中。
我目前只是为传递的参数设置了一个成员变量,但我不确定它是否正确。
class AtomicLong
{
public:
inline void LazySet(__int64 aValue)
{
// TODO: Is this correct?
iValue = aValue;
}
inline void Set(__int64 aValue)
{
::InterlockedExchange64(&iValue, aValue);
}
private:
__declspec(align(64)) volatile __int64 iValue;
};
我不能使用升压。
编辑:我正在编译到 x64,但也许 32 位代码的解决方案对其他人有帮助。
我无权访问 C++11。