複数のスレッドを実行しているとき,あるスレッドのメモリに対する書き込みが別のスレッドからどんなふうに観測される可能性があるかを定めたものをメモリモデルというそうです.プログラミング言語の仕様として定められていたり,CPU の仕様としてマニュアルに解説があったりするものだそうです. マルチスレッドプログラミングを行うときにはこれを前提にするわけですが,困ったことに x86 のマニュアルにある自然言語での説明が曖昧だったり,時に実プロセッサの挙動と合わなかったりといろいろ問題があるそうです. これに対処するために,過去の複数版のマニュアルを読み解き,実プロセッサを調査してメモリモデルを形式的に作ったという論文があります. x86-TSO: A Rigorous and Usable Programmer’s Model for x86 Multiprocessors (論文PDFへのリンク)