メモリバリア
マルチスレッド化されたプログラムは一般に、POSIXスレッド(Pthreads)あるいはWin32などのAPIが提供する同期プリミティブや、(通例そのようなAPIを使って実装された)Javaや.NETなどの高水準言語あるいはフレームワークが提供する同期プリミティブまたは同期構文を使用する。ミューテックスやセマフォなどのプリミティブは、複数スレッドが共有資源にアクセスするための同期機能を提供する。これらのプリミティブは必要なメモリ可視性 (visibility) を提供するためにメモリバリア機能も実装していることが多い。そのような保証のある環境においてこれらの同期機構による排他制御を実装する場合は、メモリバリアをプログラマが明示的に使用する必要はない。ほとんどの用途では、同期プリミティブや同期構文によって提供される暗黙的なメモリバリアのほうが簡潔な手段である。
各APIやプログラミング環境は、原則として自身の高レベルメモリモデルを持っていて、メモリ可視性を定義している。