The shared memory programming model has several advantages over the me
ssage-passing model. To write correct and efficient shared memory prog
rams, programmers need a precise notion of shared memory semantics. Th
e memory consistency model of a shared memory multiprocessor formally
specifies how the memory system will appear to the programmer. The mem
ory consistency model is an interface between the programmer and the s
ystem, so it influences not only how parallel programs are written but
virtually every aspect of parallel hardware and software design. A me
mory consistency model specification is required at every interface be
tween the programmer and the system. At each level, the memory consist
ency model affects both programmability and performance. Furthermore,
due to a lack of consensus on a single model, portability can be affec
ted when moving software across systems supporting different models. U
nfortunately, the vast Literature that describes consistency models us
es nonuniform, complex terminology to describe the large variety of mo
dels. This makes it difficult to understand the often subtle but impor
tant differences among models and leads to several misconceptions. Thi
s article describes memory consistency models in a way that most compu
ter professionals can understand. The focus is consistency models prop
osed for hardware-based shared memory systems. Most of these models em
phasize the system optimizations they support, and the authors retain
this system-centric emphasis in this article.