Si tratta di bloccare il bus di memoria per quell'indirizzo. The Intel 64 and IA-32 Architectures Software Developer's Manual - Volume 3A: System Programming Guide, Part 1 ci dice:
7.1.4 Effetti di un'operazione di BLOCCO su cache del processore interno.
Per i processori Intel486 e Pentium, il segnale LOCK # è sempre asserito sul bus durante un'operazione SERRATURA , anche se l'area di memoria essere bloccato viene memorizzato nella cache nel processore .
Per il P6 e processore recenti famiglie più, se l'area di memoria essendo bloccata durante un'operazione serratura è nella cache nel processore che è eseguire l'operazione BLOCCO come memoria write-back ed è completamente contenuto in una riga della cache, il processore potrebbe non asserire il segnale LOCK # sul bus. Invece, sarà modificare internamente la posizione di memoria e consentire al suo [...] meccanismo di coerenza della cache di assicurare che l'operazione venga eseguita atomicamente. Questa operazione si chiama "blocco della cache". Il meccanismo di coerenza della cache impedisce automaticamente a due o più processori di avere la stessa area della memoria da modificare simultaneamente i dati in quella zona. (Enfasi aggiunta)
Qui si apprende che il P6 e patatine più recenti sono abbastanza intelligente per determinare se hanno davvero per bloccare l'autobus o possono fare affidamento solo sul caching intelligente. Penso che questa sia un'ottimale ottimizzazione.
ho parlato più nel mio post sul blog "How Do Locks Lock?"
fonte
2010-07-26 22:10:32
correlati: [? Può num ++ essere atomica per 'int num'] (https://stackoverflow.com/questions/39393850/can-num-be -atomic-for-int-num) dove la mia risposta spiega come le istruzioni 'lock'ed vengono eseguite internamente. –