Estoy tratando de portar algunos códigos Java a Windows C++ y estoy confundido acerca de cómo implementar AtomicLong.lazySet()
. La única información que puedo encontrar habla sobre qué hace pero no cómo implementarla, y el código fuente disponible termina en una biblioteca nativa privada propiedad de Sun (sun.misc.Unsafe.class
).puerto C++ de AtomicLong.lazySet
Actualmente solo establezco una variable miembro para el parámetro pasado, pero no estoy seguro de si es correcto.
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;
};
No puedo usar boost.
Edit: Estoy compilando a x64 pero quizás las soluciones para el código de 32 bits serían de ayuda para otros.
No tengo acceso a C++ 11.
* '// TODO: ¿Es esto correcto' * Creo que es correcto en sistemas de 64 bits? , pero no los sistemas de 32 bits. – Mehrdad
¿Has probado [OpenJDK] (http://openjdk.java.net/) fuentes? Reemplazó la mayoría (¿todos?) Del código propietario de Sun con componentes de código abierto, tal vez usted puede tener un pico en su implementación de AtomicLong y sus bibliotecas nativas. –