- ベストアンサー
スレッド
問題集を読んでいて、どうしても意味がわからなかった部分があります。五択になっていて、私は 「notify()実行の条件は、呼び出し元のスレッドが待機状態にあるスレッドのロックフラグを取得していることである」 を選んだんですが、これは間違いでした。 解説には待機スレッドのロックフラグは必要ではない、とあるのですが、では逆に言うとなんの(何処の)ロックフラグが必要になるのでしょうか? ご存知の方がいらっしゃいましたら、教えて下さい。 宜しくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
notify()、notifyAll()、wait()を実行するには「排他処理対象のオブジェクトのロックを取得している」 必要があります。 そもそもロックとは何かいうと、 「オブジェクトを操作する上で、1つのスレッドにしか与えられない実行権利」です。 例をあげます。 オブジェクトAを排他処理の対象にしようとしています。スレッドBはオブジェクトAを操作しようとして、既に待ちの状態になっています。この場合、スレッドBの実行権利を取得しても何の意味もないですよね。オブジェクトAを操作する権利が必要ですよね。 ご理解いただけたでしょうか。
その他の回答 (1)
- UKY
- ベストアンサー率50% (604/1207)
回答No.1
できれば、他の選択肢の内容も教えていただけるとお答えしやすいのですが……
質問者
お礼
書き込みありがとうございました。 他の選択三つは、同期・排他制御に関する問題なのに、sleep()とかがでてきてるので、問題外なのです。 ちなみにその問題集の正解の答えは 「wait()実行の条件は、呼び出し元のスレッドが使用しているオブジェクトのロックフラグを取得していることである」でした。 今回は書き込みをしてくださり、ありがとうございました。
お礼
丁寧な説明をありがとうございます。 うーん、納得! スレッドについては(も?)まだまだなので、もっと勉強を頑張りたいと思います。 今回は本当にありがとうございました。