Every architecture provides synchronization primitives make memory ordering stricter; memory barrier instructions prevent reorderings, but are expensive!
Some more information: https://stackoverflow.com/questions/4537753/when-should-i-use-mm-sfence-mm-lfence-and-mm-mfence
Example of use: https://stackoverflow.com/a/50770258/3242010 -- this was very helpful for me in understanding how one might use one of these x86 functions!
Every architecture provides synchronization primitives make memory ordering stricter; memory barrier instructions prevent reorderings, but are expensive!