En una máquina x86 multinúcleo, decir que una ejecución de subproceso en core1 incrementa una variable entera a
al mismo tiempo, la secuencia en el núcleo 2 también la incrementa. Dado que el valor inicial de a
era 0, ¿sería siempre 2
al final? O podría tener algún otro valor? Supongamos que a
se declara como volatile
y no estamos utilizando variables atómicas (como atomic <> de C++ y operaciones atómicas incorporadas en gcc).¿Se incrementa un número entero atómico en x86?
Si el valor de a
De hecho, sería siempre 2, en tal caso, ¿significa que un long int
en x86-64 también tendría la misma propiedad, es decir, siempre habrá a
2 en el final?
a menos que esté utilizando un tipo atómico especial, el incremento suele ser tres operaciones separadas. Cargar, Incrementar, luego Almacenar. –
'volátil' no le da acceso atómico. –
@CatPlusPlus es su nombre una operación atómica? : P – MByD