Requisitos de alineación para instrucciones atomic x86.

Microsoft ofrece laInterlockedCompareExchange Función para realizar operaciones atómicas de comparación y cambio. También hay un_InterlockedCompareExchange intrínseco.

En x86 estos se implementan utilizando elcmpxchg instrucción.

Sin embargo, al leer la documentación sobre estos tres enfoques, no parecen estar de acuerdo con los requisitos de alineación.

De Intelmanual de referencia no dice nada sobre la alineación (aparte de esoSi la verificación de alineación está habilitada y se hace una referencia de memoria no alineada, se genera una excepción)

También busqué lalock prefijo, que establece específicamente que

La integridad del prefijo LOCK esno afectado por la alineación del campo de memoria.

(énfasis mío)

Así que Intel parece decir que la alineación es irrelevante. La operación será atómica pase lo que pase.

los_InterlockedCompareExchange la documentación intrínseca tampoco dice nada acerca de la alineación, sin embargo, laInterlockedCompareExchange función Establece que

Los parámetros para esta función deben alinearse en un límite de 32 bits; de lo contrario, la función se comportará de forma impredecible en los sistemas multiprocesador x86 y en cualquier sistema que no sea x86.

Entonces, ¿qué da? ¿Son los requisitos de alineación paraInterlockedCompareExchange solo para asegurarnos de que la función funcionará incluso en las CPU previas a 486, dondecmpxchg la instrucción no está disponible? Parece probable que esté basado en la información anterior, pero me gustaría estar seguro antes de confiar en ella. :)

¿O es la alineación requerida por la ISA para garantizar la atomicidad, y simplemente estoy buscando los lugares equivocados en los manuales de referencia de Intel?

Respuestas a la pregunta(4)

Su respuesta a la pregunta