悲観ロック 【pessimistic locking】
概要
悲観ロック(pessimistic locking)とは、共有データの排他制御(ロック)の一種で、他の主体のアクセスを禁止してから共有データの処理を行う手法。資源の競合が頻繁に起きる前提に立つため「悲観」と呼ばれる。並行処理が可能なシステムでは、同じシステム上の同じ資源(共有メモリ領域など)を、複数の主体(利用者やプログラムなど)が同時にアクセスすることがある。その際、処理に矛盾が生じないよう他の主体のアクセスを制限する仕組みを「ロック」(locking)という。
悲観ロックは処理開始時に他の主体によるアクセスを禁じる措置を講じる方式で、ある主体がシステムの共有資源を利用して処理を行っている最中に、頻繁に他の主体からの参照や変更の要求が行われる前提に立っている。
処理が終わり資源の更新を行ったあと、ロックを解除して他の主体が利用できるよう解放する。処理中に他の主体が資源を書き換える心配がなく確実に処理を完遂できるが、処理中は他の主体を待たせることになり、処理の異常で解放が正常に行われないとロックされたままになってしまうことがある。
資源へのアクセスを禁じる機構や、待っている他の主体に空いたこと知らせる機構などを整備する必要があり、アプリケーションが個別に実装することは難しいことが多いため、オペレーティングシステム(OS)やデータベース管理システム(DBMS)などプラットフォーム側の機能として提供されるのが一般的である。
一方、処理開始時に他の主体によるアクセスを禁じないロック方式を「楽観ロック」(optimistic locking)という。処理中に他の主体が資源を書き換えてしまったら結果を破棄してやり直す。資源の競合が滅多に起きないと想定されるシステムや、処理のやり直しが簡単な場合などに用いられる。
(2024.8.21更新)