- - PR -
コマンド終了待ち時のタイムアウト処理
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-10-03 15:36
デッドロックにはなりませんよ。 起動スレッドをT1、監視スレッドをT2として、 (A) T1:起動イベントのモニターを獲得 (B) T1:監視スレッドをstart() (C) T2:完了イベントのモニターを獲得 (D) T2:起動イベントのモニターを獲得 -> 不可(T1が獲得中) (E) T1:起動イベントをwait() -> モニターを解放 (F) T2:起動イベントのモニターを獲得 -> 獲得可能 (G) T2:起動イベントをnotify() (H) T2:起動イベントのモニターを解放 (I) T1:起動イベントのモニターを獲得 (J) T1:起動イベントのwait()から復帰 (K) T1:起動イベントのモニターを解放 という流れになります。 この時に、T2の開始(C,D)と(E)のwait()の実行順序は定まりませんが、 (C,D)は(E)の待機の復帰前には実行されることになるので問題ないです。 #実際にも(E)の待機中にT2が開始される可能性の方が高いと思います。 #実装依存(+プロセッサ数依存)ですが、T1は実行中であり、スレッドを #起動したとしてもwait()で実行権を放棄するまでは奪われないでしょう。 言い換えると、(E)のwait()の復帰には(G)のnotify()が必要となり、 (E)のwait()から復帰させるタイミングはT2が握ることになるので、 その間に初期化処理を完了させる事が出来るわけです。 | ||||||||
|
投稿日時: 2006-10-03 19:03
waitでロックが解放されるのですね。 了解致しました。 参考にさせて頂きます。 | ||||||||
|
投稿日時: 2006-10-04 15:43
下記のようなコードで、割合シンプルに実装できそうです。
|