Su una macchina x86 multicore, un thread in esecuzione su core1 incrementa una variabile intera a
allo stesso tempo il thread sul core 2 lo incrementa anche. Dato che il valore iniziale di a
era 0, sarebbe sempre 2
alla fine? O potrebbe avere qualche altro valore? Si supponga che sia dichiarato come volatile
e che non si utilizzino variabili atomiche (come atomico <> di C++ e operazioni atomiche incorporate in gcc).È incrementale un numero intero atomico in x86?
Se il valore della a
sarebbe effettivamente essere sempre 2 in tal caso, vuol significare che una long int
in x86-64 avrebbe anche la stessa proprietà, vale a dire, a
saranno sempre 2 alla fine?
a meno che non si utilizzi un tipo atomico speciale, l'incremento è in genere tre operazioni separate. Carica, incrementa, quindi archivia. –
'volatile' non ti dà accesso atomico. –
@CatPlusPlus è il tuo nome un'operazione atomica? : P – MByD