Sto cercando di migliorare la mia comprensione delle barriere di memoria. Supponiamo di avere un modello di memoria debole e adattiamo Dekker's algorithm. È possibile farlo funzionare correttamente con il modello di memoria debole aggiungendo barriere di memoria?Barriere di memoria contro operazioni interbloccate
Penso che la risposta sia un no sorprendente. Il motivo (se sono corretto) è che, sebbene sia possibile utilizzare una barriera di memoria per garantire che una lettura non venga spostata oltre un'altra, non può garantire che una lettura non visualizzi dati non aggiornati (come quelli in una cache). Quindi potrebbe vedere un po 'di tempo in passato quando la sezione critica è stata sbloccata (secondo la cache della CPU) ma al momento attuale altri processori potrebbero vederla come bloccata. Se la mia comprensione è corretta, è necessario utilizzare operazioni interbloccate come quelle comunemente chiamate test-and-set o compare-and-swap per garantire un accordo sincronizzato di un valore in una posizione di memoria tra più processori.
Quindi, possiamo giustamente aspettarci che nessun sistema di memoria debole fornisca solo barriere di memoria? Il sistema deve fornire operazioni come test-and-set o compare-and-swap per essere utili.
Mi rendo conto che i processori popolari, incluso x86, forniscono modelli di memoria molto più potenti di un modello di memoria debole. Si prega di concentrare la discussione sui modelli di memoria deboli.
(Se l'algoritmo di Dekker è una cattiva scelta, scegliere un altro algoritmo di mutua esclusione dove le barriere di memoria possono raggiungere con successo corretta sincronizzazione, se possibile.)
AFAICT, per Dekker's, non è sufficiente sapere che la bandiera è stata chiara qualche volta nel passato, ma piuttosto che è sicuro entrare nella sezione critica in questo momento. Sembra che abbia bisogno del valore aggiornato, e non vedo come si ottiene con le barriere della memoria (come dici tu nella tua prima frase). –
Hai solo bisogno di una barriera più forte di quella che ho appena mostrato --- un "recinto completo". Aggiornerò la mia risposta per mostrare Dekker con ostacoli in seguito. –