Estoy implementando un mecanismo sin cerradura que utiliza instrucciones atómicas (dobles) de comparación e intercambio, p. cmpxchg16bOperaciones atómicas en C++ para estructuras sin cerradura
Actualmente estoy escribiendo esto en ensamblador y luego vinculándolo. Sin embargo, me preguntaba si había alguna manera de que el compilador hiciera esto automáticamente por mí. p.ej. rodear el bloque de código con 'atómicamente' y hacer que descubra cómo implementar el código como una instrucción atómica en la arquitectura del procesador subyacente (o generar un error en tiempo de compilación si el arco subyacente no lo admite)?
P.S. Yo sé que gcc tiene algunos muebles empotrados (al menos para CAS)
http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Atomic-Builtins.html#Atomic-Builtins
MSVC tiene operaciones interconectadas, y GCC tiene funciones de operaciones atómicas integradas, por lo que no es necesario realizar el ensamblador en línea. Al utilizar las envolturas del compilador, se mantendrá portátil en todas las plataformas compatibles con el compilador. – bdonlan
MSVC tiene operaciones interbloqueadas solo para tipos de datos largos, OP desea duplicar. – gbjbaanb
gcc no tiene opciones integradas para DWCAS. MSVC tiene un built-in para DWCAS. Ningún SO tiene DW (doble palabra, por ejemplo, dos longitudes de puntero, una al lado de la otra) para incrementos, decrementos, etc. - DW solo existe y solo existe (y solo ha existido alguna vez) para CAS. –