我想將一些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