楽観ロック 【optimistic locking】
概要
楽観ロック(optimistic locking)とは、共有データの排他制御(ロック)の一種で、他の主体のアクセスを妨げずに共有データの処理を行う手法。滅多に資源の競合が起きない前提に立つため「楽観」と呼ばれる。並行処理が可能なシステムでは、同じシステム上の同じ資源(共有メモリ領域など)を、複数の主体(利用者やプログラムなど)が同時にアクセスすることがある。その際、処理に矛盾が生じないよう他の主体のアクセスを制限する仕組みを「ロック」(locking)という。
楽観ロックは資源の利用時に他の主体によるアクセスを禁止しない方式で、処理が終わり資源を更新する際、読み込み時以降に誰かが変更したかを調べ、変更があれば更新は行わずに結果を破棄して処理失敗を宣言する。変更されていなければ結果を書き戻して処理完了とする。
処理の最中に参照している資源の内容が書き換わってしまうことは滅多に起こらない前提に立ったロック方式である。資源のアクセスを禁じたり、他の主体へ通知するための仕組みが不要で、他の主体に待ち時間が生じず、ロックの解放漏れが起きないなどの利点がある。
変更があったか確認する方法として、データが短い場合はそのものを比較することもあるが、更新時にタイムスタンプを記録して照合する方式や、更新時にバージョン番号を増やすようにして値が一致するか調べる方式が用いられることがある。不運にも途中で変更が行われると処理失敗になってしまうため、処理のやり直しが可能で、やり直しがあまり負担にならない場合によく用いられる。
一方、処理開始時に他の主体によるアクセスを禁じる措置を取るロック方式を「悲観ロック」(pessimistic locking)という。楽観ロックとは逆に、資源の競合が頻繁に起きることが予想される状況や、処理のやり直しに重い負担が生じる場合などに用いられる。
(2024.8.21更新)