私はいくつかのJavaコードをWindows C++に移植しようとしています。AtomicLong.lazySet()
の実装方法について混乱しています。見つけられる唯一の情報は、それがどういうものなのかということではなく、それを実装する方法ではなく、入手可能なソースコードはSunが所有する私的なネイティブライブラリ(sun.misc.Unsafe.class
)で終わります。AtomicLong.lazySetのC++ポート
現在、渡されたパラメータにメンバー変数を設定していますが、正しいかどうかはわかりません。
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
[OpenJDK](http://openjdk.java.net/)ソースを試しましたか?これはSun独自のコードのほとんど(すべて?)をオープンソースのコンポーネントに置き換えたもので、AtomicLongとそのネイティブライブラリの実装をピークにすることができます。 –