Función D utilizando el x86 CMPXCHG Compare-and-swap
Pregunta
Estoy buscando una función que presente una interfaz de alto nivel D para un CAS atómico en Intel x86.
Sé que puedo hacerlo con el ASM en línea (y si es necesario, lo haré), pero prefiero tomar el código de otra persona si puedo.
Solución
De la documentación en: http://www.digitalmars.com/d/ 2.0 / overview.html
Ensamblador en línea
Controladores de dispositivo, alto rendimiento aplicaciones de sistemas, sistemas embebidos, y el código especializado a veces necesita sumergirse en el lenguaje ensamblador para obtener el trabajo hecho. Mientras que las implementaciones de D son No se requiere implementar el inline. ensamblador, se define y forma parte de el idioma. La mayoría de las necesidades de código de montaje Se puede manejar con ella, obviando el necesidad de ensambladores separados o DLL's.
Muchas implementaciones en D también apoya funciones intrínsecas análogamente al apoyo de C de intrínsecos para la manipulación de puertos de E / S, Acceso directo a flotadores especiales. operaciones puntuales, etc.
Por lo tanto, en teoría, puedes usar el CMPXCHG directamente.
Editar
Es posible que desee consultar: http://www.dsource.org/projects/tango/browser/trunk/tango/core/Atomic.d?rev=4277
Se demora un poco en cargarse por algún motivo, pero está utilizando la instrucción CMPXCHG de forma interna, debería ser trivial para renovarla para sus propósitos.