ロックシステムの実装。
デッドロックを防ぐにはロックの順序を統一しなければならない。
ロックの順序を統一するには、ロックを必要とする処理を一斉に行なわなければならない。
†ロックのかけかた - 遅い→起動時
PageElementsのコンストラクターでロック要求→:i/ロックフェイズで要求が叶ったら→Actionメソッド1→必要ならまたロック要求→:i/ロックフェイズ→Actionメソッド2→必要なら…
ロック要求にはロックの種別とコールバック(Action呼び出しの方法)を与える
Actionを呼び出す順序は不定。PageElementインスタンスのロック要求次第。
その後、To...呼び出し→レスポンス
ロックフェイズは何度でも †
やり直しと繰り返しの違い。
すでに始まっているロックフェイズでロックを追加するには途中までロック解除してから追加、順序を乱さないようにしてやり直し。
ロックフェイズ(とコールバック)が終わったらすべてのロックを解除。その時点でロック要求(追加要求分)があれば同じロックフェイズの繰り返し2回目。
ロックフェイズでやること †
前提条件なし。トリガーは呼ばれたら。「なになに前のロックフェイズ」のように実行タイミングごとにロックフェイズに名前があるようなもの。