There are eight types of memory ordering in some architectures which can be reordered with atomic operations if the operations consists of an ordered list of invocation and response events.
Loads can be reordered after loads Loads can be reordered after stores Stores can be reordered after stores Stores can be reordered after loads Atomic can be reordered with loads Atomic can be reordered with stores Dependent loads can be reordered Incoherent instruction cache pipeline Memory ordering in some architectures Atomic operations can be reordered with loads and stores. 
