The memory model of x86 processors guarantee that writes become visible to other cores in the order they were made, i.e. as if there is a store queue.
In my practice, this holds for memory-mapped file persistence too, which greatly simplifies high-performance database implementations, among other things (because it's trivial to read a truncated log, unlike the one which has been randomly corrupted)
The memory model for ARM makes no such guarantees.
Does this mean applications are required to always explicitly (and synchronously) flush memory-mapped files on ARM, e.g. with fsync
?
UPD: This assumes a concurrently-executing reader accessing the same memory-mapped file, simple, bare-metal local volumes and that the reader, OS and hardware keeps running, only the writer might have been hung or crashed