gpt4 book ai didi

java - AtomicLong.lazySet 的 C++ 端口

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:44:08 24 4
gpt4 key购买 nike

我正在尝试将一些 Java 代码移植到 Windows C++,但对如何实现 AtomicLong.lazySet() 感到困惑。我能找到的唯一信息是谈论它的作用,而不是如何实现它,可用的源代码最终在 Sun 拥有的私有(private) native 库中 (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;
};

我不能使用 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;
};

关于java - AtomicLong.lazySet 的 C++ 端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11888210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com