Many programmers naively assume that all the behaviours of a concurrent program can be generated by some arbitrary interleaving of its threads. This assumption, however, is incorrect. Due to compiler and/or hardware optimisations, concurrent programs can exhibit a number of behaviours that are not explainable by any interleaving of their threads. The formal study of the exact behaviours concurrent programs can exhibit is a field known as weak memory consistency. Weak Memory Consistency

See memory consistency model

Also it is a lecture by Ori Lahav and Viktor Vafeiadis.