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