Con un processore single-core, in cui tutti i thread vengono eseguiti da una singola CPU, l'idea di implementare una sezione critica utilizzando un'operazione di test-and-set atomico su alcuni mutex (o semaforo o ecc) in memoria sembra abbastanza semplice; Poiché il tuo processore sta eseguendo un test-and-set da un punto del tuo programma, non può necessariamente farlo da un altro punto del tuo programma mascherato come un altro thread.Sezioni critiche con processori multicore
Ma cosa succede quando si dispone di più di un processore fisico? Sembra che la semplice atomicità a livello di istruzione non sia sufficiente, b/c con due processori che eseguono potenzialmente le operazioni di test-and-set contemporaneamente, ciò di cui si ha realmente bisogno per mantenere l'atomicità è l'accesso alla posizione di memoria condivisa del mutex. (E se la posizione della memoria condivisa è caricata nella cache, c'è anche l'intera consistenza della cache da trattare ..)
Questo sembra comportare molto più sovraccarico del caso single core, quindi ecco la carne di la domanda: quanto peggio è? È peggio? Viviamo semplicemente con esso? O aggirarlo applicando una politica che tutti i thread all'interno di un gruppo di processi devono vivere sullo stesso nucleo fisico?
Il test-and-set è garantito per essere atomico su più CPU? – Blindy
test e set ha solo il numero di consenso 2. –