And often both concepts have to be considered together, with all bells and whistles, in order to get the code right. Volatile variables required atomic operations in order to make code execute right.
IMO this is just the case with atomic operations and volatile variables.