Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > monitorライブラリ > MonitorMixin::ConditionVariableクラス

class MonitorMixin::ConditionVariable

クラスの継承リスト: MonitorMixin::ConditionVariable < Object < Kernel

要約

MonitorMixinMonitor のための 条件変数クラスです。 MonitorMixin#new_cond が返します。ユーザが MonitorMixin::ConditionVariable.new を直接呼ぶことはありません。

目次

インスタンスメソッド
broadcast count_waiters signal wait wait_until wait_while

インスタンスメソッド

broadcast -> ()[permalink][rdoc]

その条件変数で 待っている全てのスレッドの実行を再開します。

[SEE_ALSO] MonitorMixin::ConditionVariable#signal

count_waiters -> Integer[permalink][rdoc]

その条件変数で待っているスレッドの数を返します。

signal -> ()[permalink][rdoc]

その条件変数で待っているスレッドがあれば実行を再開させます。

複数のスレッドが待っている場合には1つのスレッドのみ 実行を再開します。

[SEE_ALSO] MonitorMixin::ConditionVariable#broadcast

wait(timeout = nil) -> bool[permalink][rdoc]

モニタのロックを開放し、現在のスレッドを停止します。

これを呼ぶスレッドはモニタのロックを保持している必要があります。

MonitorMixin::ConditionVariable#signalMonitorMixin::ConditionVariable#broadcast で起こされるまでスレッドは停止し続けます。

timeout を与えた場合は最大 timeout 秒まで停止した後にスレッドを 再開します。

実行を再開したスレッドはモニタのロックを保持した状態になります。 これによって危険領域(critical section)上で動作している スレッドはただ一つになり、排他を実現します。

true を返します。timeout が与えられていて待ち時間が timeout を 越えた場合は false を返します。

[PARAM] timeout:
タイムアウトまでの秒数。指定しなかった場合はタイムアウトしません。
[EXCEPTION] ThreadError:
ロックを持っていないスレッドがこのメソッドを呼びだした場合に発生します

[SEE_ALSO] MonitorMixin::ConditionVariable#wait_while, MonitorMixin::ConditionVariable#wait_until

wait_until { ... } -> ()[permalink][rdoc]

モニタのロックを開放し、現在のスレッドを ブロックで指定した条件を満たすまで停止します。

MonitorMixin::ConditionVariable#signalMonitorMixin::ConditionVariable#broadcast で スレッドが起こされると、ロックを取得し、ブロックを評価し その結果によってこのメソッドから抜け処理を継続するか 再びロックを開放しスレッドを停止するかを決めます。

[SEE_ALSO] MonitorMixin::ConditionVariable#wait

wait_while { ... } -> ()[permalink][rdoc]

モニタのロックを開放し、現在のスレッドを ブロックで指定した条件を満たしている間停止します。

MonitorMixin::ConditionVariable#signalMonitorMixin::ConditionVariable#broadcast で スレッドが起こされると、ロックを取得し、ブロックを評価し その結果によってこのメソッドから抜け処理を継続するか 再びロックを開放しスレッドを停止するかを決めます。

[EXCEPTION] ThreadError:
ロックを持っていないスレッドがこのメソッドを呼びだした場合に発生します

[SEE_ALSO] MonitorMixin::ConditionVariable#wait