一貫性モデル (ソフトウェア)
一貫性モデルまたは整合性モデルは、分散共有メモリシステムや分散データストア（ファイルシステム、データベース、楽観的レプリケーションシステム、ウェブキャッシングなど）のような分散システムで使用される。システムは、メモリ上の操作が特定のルールに従っている場合、あるモデルをサポートしていると言う。データ一貫性モデルは、プログラマーとシステムの間の契約を規定するもので、プログラマーがルールに従えば、メモリは一貫しており、メモリの読み書きや更新の結果は予測可能であることをシステムが保証する。これは、キャッシュやキャッシュレスのシステムで発生するコヒーレンスとは異なり、すべてのプロセッサに対するデータの一貫性を意味する。コヒーレンスは、1つの場所や1つの変数への書き込みをすべてのプロセッサが見ることができるようなグローバルな秩序を維持することを意味する。一貫性とは、複数の場所への操作の順序を、すべてのプロセッサに対して維持することである。
C++ や Java などの高レベル言語では、メモリ操作を低レベルの操作に変換することで、メモリセマンティクスを維持しながら契約を部分的に維持している。契約を守るために、コンパイラは一部のメモリ命令を並べ替えたり、pthread_mutex_lock()などのライブラリコールは必要な同期をカプセル化したりする。
モデル検査による逐次的な整合性の検証は、有限状態のキャッシュコヒーレンスプロトコルであっても、一般的には決定不可能である。
一貫性モデルは、更新の見かけ上の順序と可視性に関するルールを定義しており、トレードオフの連続性を持っている。