Порт C++ для AtomicLong.lazySet

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

6
задан James 9 August 2012 в 18:10
поделиться