ロックシステムの実装。

デッドロックを防ぐにはロック順序を統一しなければならない。
ロック順序を統一するには、ロックを必要とする処理を一斉に行なわなければならない。
ロックのかけかた - 遅い→起動時

PageElementsのコンストラクターでロック要求→:i/ロックフェイズで要求が叶ったら→Actionメソッド1→必要ならまたロック要求→:i/ロックフェイズ→Actionメソッド2→必要なら…

ロック要求にはロックの種別とコールバック(Action呼び出しの方法)を与える


Actionを呼び出す順序は不定。PageElementインスタンスのロック要求次第。


その後、To...呼び出し→レスポンス

ロックフェイズは何度でも Edit

やり直しと繰り返しの違い。
すでに始まっているロックフェイズでロックを追加するには途中までロック解除してから追加、順序を乱さないようにしてやり直し。

ロックフェイズ(とコールバック)が終わったらすべてのロックを解除。その時点でロック要求(追加要求分)があれば同じロックフェイズの繰り返し2回目。

:i/ロックフェイズは何度でも

ロックフェイズでやること Edit

前提条件なし。トリガーは呼ばれたら。「なになに前のロックフェイズ」のように実行タイミングごとにロックフェイズに名前があるようなもの。

  1. ロック要求の受け付け
  2. ロック要求リストのロックと、次のロック要求リストの生成
  3. ロックロック要求リストの更新
  4. コールバック
  5. 次のロック要求リストにエントリーがあれば繰り返し