同期 (計算機科学)

同期（どうき、Synchronization）とは、コンピュータ関係（コンピュータ科学でも重要なテーマであるが、話題の広がりとしてはそれに留まらない）では、プロセスなどといった複数のエージェントの動作について、時系列的にタイミングを合わせる制御のことや、複数個所に格納された同一であるべき情報を同一に保つことである。

 並行計算における同期 
マルチタスクやマルチスレッドにおいて、同時並行して動作するプロセスやスレッドの間で時系列的な制御をすること。主にクリティカルセクションの排他的処理を保証する手段として以下のものがある。

 セマフォ
 ミューテックス（ロック）
 イベント、モニター
 非ブロック同期（Lock-freeとWait-freeアルゴリズム）

他に、クリティカルセクションとは関係なく処理の進行を待ち合わせることも「同期」と言う。プロセス間通信、遠隔手続き呼出し (RPC)、シグナルによる同期などがあげられる。また、スレッド間の待ち合わせとして「バリア」と呼ばれる機構がある。

 ハードウェアにおける同期 
コンピュータのハードウェアは、一般にクロック同期設計により全体が同期して動作する。また、フォールトトレラントシステムでは、複数のCPUで同一の処理を同時に（つまり同期して）実行する（冗長化）。マルチプロセッサシステムのキャッシュメモリは、MESIプロトコルなどのキャッシュコヒーレンシプロトコルを使用して内容を同期させて一貫性を保つ。

 コンピュータネットワークにおける同期 
コンピュータネットワークの通信プロトコルには同期信号などの様々な同期方式を採用したものがある。例えば、High-Level Data Link Controlはフレーム同期型である。

ネットワーク上のコンピュータ間で時刻同期させるプロトコルとしてNetwork Time ProtocolやSimple Network Time Protocolがある。さらに別の用法として、複数のネットワーク機器間でコンテンツの内容を同一に保つことを「同期」という（iTunes、Personal Information Manager、ファイル同期など参照）。

Category:同期
Category:並行性
Category:コンピュータを介したコミュニケーション