|
|
|
|
|
by gpderetta
1698 days ago
|
|
volatile does not work as a memory barrier neither in theory nor in practice. On gcc for example you need an explicit additional compiler barrier before a volatile store and after a volatile load to implement the expected release/acquire semantics on x86. See [1] for example the implementation of smp_store_release and smp_load_acquire in the linux kernel (barrier() is just a compiler barrier and {READ,WRITE}_ONCE are a cast to volatile). Volatile only prevents reordering of volatile statements (and IO), not all load and stores. [1] https://elixir.bootlin.com/linux/latest/source/tools/arch/x8... |
|