我想将一些Java代码移植到Windows C++,并且对如何实现AtomicLong.lazySet()
感到困惑。我可以找到的唯一信息是关于它的功能,但不知道如何实现它,而可用的源代码最终在Sun拥有的私有本地库(sun.misc.Unsafe.class
)中。C++端口的AtomicLong.lazySet
我目前只是设置一个成员变量传递参数,但我不知道它是否正确。
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的权限。
*'// TODO:这是正确的'*我认为这是正确的在64位系统? ,但不是32位系统。 – Mehrdad 2012-08-09 16:53:39
你有没有试过[OpenJDK](http://openjdk.java.net/)的源代码?它用开源组件取代了大部分(所有?)Sun专有代码,也许你可以在实现AtomicLong和它的本地库方面取得一个高峰。 – 2012-08-09 17:53:46