a163236のブログ

Chiselマスターになになりたい初心者

悲観的ロックと楽観的ロック

まずは背景

例えば、あなたの仕事のパートナー(彼)が1人いて、彼と一緒にオンライン上の発表資料(パワポ)を編集しろとの指示を受けたとする。 ここで問題が起こる可能性がある。

問題ないとき

  • 別々のスライドを編集しているとき

問題があるとき

  • 同じスライドを編集しているとき

あるときに、彼の編集しているマスと自分の編集しているマスが同じだったとき、どのようなことがおこってしまうのだろうか?
それは、これから説明する悲観的ロックか楽観的ロックかのそれぞれの場合かによって異なる。

悲観的ロック

同じ処理を異なる誰かが同時に行うことがよくあるという悲観的な考えで、 そのアイテム処理を誰かが行った瞬間に、他の人が処理を同時に行えないようにアイテムをロックすること。 処理を行っている人の処理が終わったらロックは解除される。
上の例だと、彼の処理が一通り終わるまではそのスライドの編集が出来なくなる。

悲観的ロックはどういう時に使う?

デメリット

同時に処理が行えないことはもちろんデメリット。また、上の例では彼の仕事がかけた時間に比例して良いスライドが作れる優秀な人間なら良いのだが、もし彼がポンコツのときは死ぬ。

楽観的ロック

同じ処理を異なる誰かが同時に行うことがあまりないという楽観的な考えで、 上の例だと、彼と自分は同時に作業できるけど、先に編集を終わらせた方の人のものだけが反映される。後の人の編集は無効になる。

楽観的ロックはどういう時に使う?

デメリット

上の例だと、彼のポンコツぶりをカバーしようと頑張ってスライド作っていたのに、もしその時彼が同時に編集して彼が先に編集を終わらしていたら自分の編集が反映されない。

参考資料

こっち読んだ方がいい。
排他制御(楽観ロック・悲観ロック)の基礎 - NagaokaKenichiさん