This is another good example for designing a system mentioned in this slide. In general conflicting memory access is rare, so let's make common case simple and fast: relaxed consistency. For uncommon case, which in this case is conflict memory access, leave the burden to software implementation. And this extra expense is tolerable.
Additionally, perhaps some of these uncommon cases can be handled at compile-time. In particular, Rust protects the programmer from shooting themselves in the foot by having too many threads "own" a piece of memory at once.