Estoy confundido de que Microsoft dice que la alineación de memoria es necesaria para InterlockedExchange, sin embargo, la documentación de Intel dice que la alineación de memoria no es necesaria para LOCK. ¿Me estoy perdiendo algo, o lo que sea? graciasAlineación InterlockedExchange y memoria
de Microsoft MSDN Library
SDK de la plataforma: DLL, procesos y subprocesos InterlockedExchange
La variable apuntada por el parámetro de destino debe ser alineados en un límite de 32 bits ; de lo contrario, esta función se comportará imprevisiblemente en en los sistemas multiprocesador x86 y cualquier sistema que no sea x86.
de Intel Software Developer's Manual;
instrucción LOCK Causas # señal de BLOQUEO del procesador para afirmar durante la ejecución de la instrucción adjunta (convierte la instrucción en una instrucción atómica). En un entorno de multiprocesador, la señal LOCK # asegura que el procesador tiene el uso exclusivo de cualquier memoria compartida mientras se afirma la señal.
La integridad del prefijo LOCK no se ve afectada por la alineación del campo de memoria. Se observa bloqueo de memoria para campos arbitrariamente desalineados.
Orden Memoria en P6 y más recientes, las familias de procesadores
instrucciones bloqueadas tienen un orden total.
software controlado por bus bloqueo
La integridad de un cierre del bus no se ve afectada por la alineación del campo de memoria. Se sigue la semántica de LOCK para tantos ciclos de bus como sea necesario para actualizar todo el operando. Sin embargo, se recomienda que los accesos bloqueados estén alineados en sus límites naturales para un mejor rendimiento del sistema: • Cualquier límite para un acceso de 8 bits (bloqueado o no). • Límite de 16 bits para accesos de palabras bloqueadas. • Límite de 32 bits para accesos de doble palabra bloqueados. • Límite de 64 bits para accesos de cuatro palabras bloqueados.
¿Debería ser eso? : "operación cmpxchg ...
no requiere* requiere * alineación" –