メモリの一貫性は、 2 つ以上のプロセッサまたはコアが共通のメモリ領域を共有するコンピュータシステムの設計に影響を与える問題です。[ 1 ] [ 2 ] [ 3 ] [ 4 ]
単一プロセッサシステム(コアが1つしかないシステム)では、すべての処理を行う処理要素は1つだけであり、したがって、特定のメモリ位置への読み書きができる処理要素も1つだけです。その結果、値が変更されると、対応するメモリ位置への以降のすべての読み取り操作では、たとえその値がキャッシュされていても、更新された値を参照することになります。
一方、マルチプロセッサ(またはマルチコア)システムでは、2つ以上の処理要素が同時に動作するため、同じメモリ位置に同時にアクセスする可能性があります。いずれの処理要素もこの位置のデータを変更しない限り、データを無期限に共有し、自由にキャッシュすることができます。しかし、いずれかの処理要素がこの位置を更新すると、他の処理要素は、例えばローカルキャッシュに存在する古いコピーを操作することになる可能性があります。そのため、共有値の変更をすべての処理要素に通知する仕組みが必要となります。このような仕組みはメモリコヒーレンスプロトコルと呼ばれ、このプロトコルが採用されているシステムは、コヒーレントメモリを備えていると言われます。
メモリコヒーレンシーの正確な性質と意味は、コヒーレンスプロトコルが実装する整合性モデルによって決定されます。正しい並行プログラムを作成するには、プログラマはシステムで使用されている正確な整合性モデルを理解しておく必要があります。
ハードウェアで実装される場合、コヒーレンシープロトコルは、例えばディレクトリベースまたはスヌーピングベース(スニッフィングとも呼ばれる)にすることができる。具体的なプロトコルとしては、 MSIプロトコルとその派生プロトコルであるMESI、MOSI、MOESIなどが挙げられる。