Java and C# also define what happens during data races enough that you can't break the memory safety guarantees with them.