One concern is whether the read is atomic. Worst case scenario, you get a torn read. You’re right, this is not a concern on current platforms.
Another concern is low level memory ordering. Personally, all my parameter interactions are acquire/release so I can make reasonable assumptions about causality in multithreaded programs. This is automatic on x86, but not on arm! Hence, programs will behave differently.
Lastly, and this is the real problem: Since the C++ compiler deems it undefined behaviour to have data races, it can and will make assumptions about data ownership - for instance, it can spill register values to unrelated memory locations (like a paramater in use, since it’s in the L1 cache anyway) because it concludes no other thread can see this behaviour (the as-if optimzation rule). Here’s a blog that actually shows this behaviour:
https://software.intel.com/en-us/blogs/2013/01/06/benign-data-races-what-could-possibly-go-wrong
In short, I would strongly advice you to fix this behaviour!
