Per una lettura semplice, si tratta principalmente di allineamento. Il modo più semplice per assicurare la lettura atomica è di usare sempre l'allineamento "naturale" - cioè, l'allineamento è tanto grande quanto la dimensione dell'oggetto (ad esempio, l'elemento a 32 bit è allineato a 32 bit).
Le letture disallineate non sono necessariamente atomiche. Per un esempio estremo, considera la lettura di un valore a 32 bit in corrispondenza di un indirizzo dispari in cui il primo byte si trova in una riga della cache e gli altri tre byte in un'altra riga della cache. In tal caso, una lettura atomica è essenzialmente impossibile.
Poiché (almeno la maggior parte) i processori utilizzano un bus di memoria a 64 bit, l'elemento più grande che può essere letto atomicamente è 64 bit.
fonte
2010-07-28 04:39:49
Penso che tu abbia ragione. Ciò ha senso. Grazie. – IamIC
Non dimenticare di accettare una risposta se ti ha aiutato;) –
Non sempre! Se l'indirizzo di memoria è nella cache che usa la seconda CPU nella CPU multy, la lettura non è garantita per essere atomica. Quindi usa "LOCK CMPXCHG EAX, [var]" che prima memorizza la memoria cache. –