ファイルなどを複数扱うとき、デッドロックしないロックの仕方。
デッドロックは「自分が止めている相手が動くのを待っている」=「自分を待っている」状態。自分/相手というのは同じプログラムの別インスタンスだったりするのでややこしい。
これを回避するにはロックする順番をそろえること。これだけ。ファイルパスやキー項目でソートすればいいだけ。
つまり「あるオブジェクトをロックできれば、それ以降のロックも必ず成功すること」が保証されればいい。(ロックが必ず成功する=まだロックされてない、として)
…で、最初のロックが複数ロックの成否を決めることになる。これはロックの単一化。ロック対象が1つならデッドロックは起きない。
----------
ロック後にロック対象を追加したい、追加でロックしたい場合はロックを全て解除すればいい。また最初が全ての成否を決める状況になる。そのあと追加した分を含めてソート、順番にロック。
厳密には、追加分より前にロックすべき分は解除しなくてもいい。追加したところからやり直し。それでロック順は保たれる。
ロック解除の順番はどうでもいい。解除は失敗しないし、ロック中=独占中、解除するのは自分だけ。
Catch Notes for Androidより送信
https://catch.com