Hoy me encontré con esta pregunta:¿Una instrucción de ensamblador siempre se ejecuta atómicamente?
tiene un código de
static int counter = 0;
void worker() {
for (int i = 1; i <= 10; i++)
counter++;
}
Si worker
se llamaría a partir de dos hilos diferentes, ¿qué valor se counter
tener después ambos están acabados?
Sé que en realidad podría ser cualquier cosa. Pero mis tripas internas me dice, que counter++
más probable es que se traducirán en una sola instrucción ensamblador, y si ambos hilos son ejecutar en el mismo núcleo, counter
habrá 20.
Pero ¿y si esos hilos se ejecutan en diferentes núcleos o procesadores, ¿podría haber una condición de carrera en su microcódigo? ¿Una instrucción de ensamblador siempre se puede ver como una operación atómica?
+1: ¡una buena inmersión en las especificaciones de ensamblaje x86! – Juergen