Я пытаюсь перенести некоторый код 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.