Come faccio a capire le barriere della memoria e le volatili

Alcuni linguaggi forniscono un modificatore volatile che è descritto come eseguire una “barriera di memoria di lettura” prima di leggere la memoria che supporta una variabile.

Una barriera di memoria di lettura è comunemente descritta come un modo per garantire che la CPU abbia eseguito le letture richieste prima della barriera prima di eseguire una lettura richiesta dopo la barriera. Tuttavia, usando questa definizione, sembrerebbe che un valore vecchio possa ancora essere letto. In altre parole, l’esecuzione di letture in un certo ordine non sembra significare che la memoria principale o altre CPU debbano essere consultate per garantire che i valori successivi letti riflettano effettivamente gli ultimi nel sistema al momento della barriera di lettura o scritti successivamente dopo il leggi barriera.

Quindi, volatile garantisce davvero che un valore aggiornato venga letto o semplicemente (sussulti!) Che i valori letti siano almeno aggiornati quanto le letture prima della barriera? O qualche altra interpretazione? Quali sono le implicazioni pratiche di questa risposta?