You're right. That said, expecting any particular *C statement* to yield an atomic operation on a given target is a bad approach anyway in general. C is not assembly.
Heck, I should say that it's not "machine language", even. Because even when using assembly, some mnemonics may actually yield several actual CPU opcodes, so even in assembly, you need to be careful about that.
And now for the treat: you can use atomic types in C if you're using C11. You need to check whether they are implemented for your particular target.