コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

楽観的ロックと悲観的ロックをざっくりまとめる

言葉としては認識しているが、どういう意図で使われるものかをざっくりまとめる。

そもそも使われる文脈

楽観的ロックと悲観的ロックはデータベースの文脈で使われる。複数人が疲れるときに同時更新に関して策を講じるかどうかの話で使われる。

このときに同時更新を防ぐために他の人の処理を防ぐ排他処理のことをロックと呼ばれ、そのロックの種類を示す。

悲観的ロック

悲観的ロックは別名「悲観的並行性制御(pessimistic concurrency control)」と呼ばれ、同時に更新することを前提した処理。

  • 処理の開始時に他の処理ができないようにする(≒ ロックする)
  • 処理が終わったら他の制御ができるようにする(≒ ロックを外す)

こうすることにより、ほかの作業をブロックするので競合することがない

楽観的ロック

対して楽観的ロックは別名「楽観的並行性制御(optimistic concurrency control)」と呼ばれ、同時に更新することは前提としない制御。

  • 処理の終了時に、他の処理がされたかを確認する
  • 他の処理がされていたら自分がやったことを破棄する

こうすることにより、更新されたもの勝ちとして、他の作業との整合性を担保する

参考リンク