C++;AtomicLong.lazySet端口 我试图将一些java代码移植到Windows C++中,并且对如何实现< AtomicLong > LaZyStET()/感到困惑。我能找到的唯一信息是关于它的功能,而不是如何实现它,并且可用的源代码最终被放在Sun拥有的私有本机库中(Sun.misc.Unsafe.class)
我目前只是将一个成员变量设置为传递的参数,但我不确定它是否正确C++;AtomicLong.lazySet端口 我试图将一些java代码移植到Windows C++中,并且对如何实现< AtomicLong > LaZyStET()/感到困惑。我能找到的唯一信息是关于它的功能,而不是如何实现它,并且可用的源代码最终被放在Sun拥有的私有本机库中(Sun.misc.Unsafe.class),java,c++,atomic,Java,C++,Atomic,我目前只是将一个成员变量设置为传递的参数,但我不确定它是否正确 class AtomicLong { public: inline void LazySet(__int64 aValue) { // TODO: Is this correct? iValue = aValue; } inline void Set(__int64 aValue) { ::InterlockedExchange64(&
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;
};
我不能用boost
编辑:
我正在编译到x64,但32位代码的解决方案可能会对其他人有所帮助
我没有访问C++11的权限。C++11包含一个原子库,如果您可以使用它,它很容易:
class AtomicLong
{
public:
inline void LazySet(int64_t aValue)
{
iValue.store(aValue, std::memory_order_relaxed);
}
inline void Set(int64_t aValue)
{
iValue.store(aValue);
}
private:
std::atomic<int64_t> iValue;
};
类原子长
{
公众:
内嵌无效懒散集(int64\t aValue)
{
存储(aValue,std::内存\u顺序\u松弛);
}
内联无效集(int64\t aValue)
{
艾瓦鲁商店(aValue);
}
私人:
std::原子荧光;
};
//TODO:这正确吗?
我认为在64位系统上是正确的,但在32位系统上不是。你试过源代码吗?它用开源组件取代了大部分(全部?)Sun专有代码,也许你可以在AtomicLong及其本机库的实现上取得一个高峰。谢谢,不过VC++2010不支持C++11。LazySet中的iValue.store
生成了什么代码?