一部の 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 にアクセスできません。