クラス
- Monitor (99)
-
MonitorMixin
:: ConditionVariable (55) - Socket (11)
- Thread (11)
モジュール
- MonitorMixin (91)
-
Socket
:: Constants (11)
キーワード
- ConditionVariable (11)
-
IFF
_ MONITOR (22) - MonitorMixin (11)
-
NEWS for Ruby 2
. 7 . 0 (5) -
NEWS for Ruby 3
. 1 . 0 (3) - broadcast (11)
- enter (11)
- exclusive (11)
- exit (11)
-
mon
_ check _ owner (5) -
mon
_ enter (16) -
mon
_ exit (16) -
mon
_ locked? (12) -
mon
_ owned? (12) -
mon
_ synchronize (16) -
mon
_ try _ enter (16) - monitor (11)
- new (11)
-
new
_ cond (16) - signal (11)
- synchronize (16)
-
try
_ enter (11) -
try
_ mon _ enter (16) - wait (11)
-
wait
_ for _ cond (5) -
wait
_ until (11) -
wait
_ while (11)
検索結果
先頭5件
-
Monitor (38024.0)
-
スレッドの同期機構としてのモニター機能を提供するクラスです。 また同じスレッドから何度も lock できる Mutex としての機能も提供します。
...できる Mutex としての機能も提供します。
MonitorMixin を include し、いくつかの別名を定義したクラスです。
=== 例
//emlist[消費者、生産者問題の例][ruby]{
require 'monitor'
buf = []
mon = Monitor.new
empty_cond = mon.new_cond
# consumer
Thread.start......d
//}
2回ロックしてもデッドロックにならない例です。
//emlist[デッドロックにならない例][ruby]{
require 'monitor'
mon = Monitor.new
mon.synchronize {
mon.synchronize {
}
}
//}
Thread::Mutex ではデッドロックになります。
//emlist[Mutex でデッド... -
Monitor
. new -> Monitor (21117.0) -
新しい Monitor オブジェクトを生成します。
...新しい Monitor オブジェクトを生成します。... -
Monitor
# new _ cond -> MonitorMixin :: ConditionVariable (21100.0) -
モニターに関連付けられた、新しい MonitorMixin::ConditionVariable を生成して返します。
...モニターに関連付けられた、新しい MonitorMixin::ConditionVariable を生成して返します。... -
Monitor
# enter -> () (21018.0) -
モニターをロックします。
...MonitorMixin#mon_enter の別名です。
Thread::Mutex#lock に相当します。
Thread::Mutex#lock と違うのは現在のモニターの所有者が現在実行されているスレッドである場合、
何度でもロックできる点です。ロックした回数だけ Monitor#exit を......呼ばなければモニターは
解放されません。
//emlist[例][ruby]{
require 'monitor'
mon = Monitor.new
mon.enter
mon.enter
//}
Thread::Mutex#lock ではデッドロックが起きます。
//emlist[Mutex でデッドロックする例][ruby]{
m = Mutex.new
m.lock
m.lock # => deadlock......ある場合、
何度でもロックできる点です。ロックした回数だけ Monitor#exit を呼ばなければモニターは
解放されません。
//emlist[例][ruby]{
require 'monitor'
mon = Monitor.new
mon.enter
mon.enter
//}
Thread::Mutex#lock ではデッドロックが起きま... -
Monitor
# mon _ enter -> () (21018.0) -
モニターをロックします。
...ある場合、
何度でもロックできる点です。ロックした回数だけ Monitor#exit を呼ばなければモニターは
解放されません。
//emlist[例][ruby]{
require 'monitor'
mon = Monitor.new
mon.enter
mon.enter
//}
Thread::Mutex#lock ではデッドロックが起きま... -
Monitor
# exit -> () (21012.0) -
モニターのロックを解放します。
...MonitorMixin#mon_exit の別名です。
enter でロックした回数だけ exit を呼ばなければモニターは解放されません。
モニターが解放されればモニターのロック待ちになっていた
スレッドが一つ実行を再開します。
@raise ThreadError ロ......ックを持っていないスレッドが呼びだした場合に発生します
//emlist[例][ruby]{
require 'monitor'
mon = Monitor.new
mon.enter
mon.enter
mon.exit
mon.exit
mon.exit # => current thread not owner (ThreadError)
//}......ドが一つ実行を再開します。
@raise ThreadError ロックを持っていないスレッドが呼びだした場合に発生します
//emlist[例][ruby]{
require 'monitor'
mon = Monitor.new
mon.enter
mon.enter
mon.exit
mon.exit
mon.exit # => current thread not owner (ThreadError)
//}... -
Monitor
# mon _ exit -> () (21012.0) -
モニターのロックを解放します。
...ドが一つ実行を再開します。
@raise ThreadError ロックを持っていないスレッドが呼びだした場合に発生します
//emlist[例][ruby]{
require 'monitor'
mon = Monitor.new
mon.enter
mon.enter
mon.exit
mon.exit
mon.exit # => current thread not owner (ThreadError)
//}... -
Monitor
# wait _ for _ cond(cond , timeout) -> bool (21012.0) -
MonitorMixin::ConditionVariable 用の内部メソッドです。
...MonitorMixin::ConditionVariable 用の内部メソッドです。
@param cond Thread::ConditionVariable を指定します。
@param timeout タイムアウトまでの秒数。指定しなかった場合はタイムアウトしません。
@return タイムアウトしたときは false を返し......ます。それ以外は true を返します。
//emlist[例][ruby]{
require 'monitor'
m = Monitor.new
cv = Thread::ConditionVariable.new
m.enter
m.wait_for_cond(cv, 1)
//}... -
Monitor
# wait _ for _ cond(cond , timeout) -> true (21012.0) -
MonitorMixin::ConditionVariable 用の内部メソッドです。
...MonitorMixin::ConditionVariable 用の内部メソッドです。
@param cond Thread::ConditionVariable を指定します。
@param timeout タイムアウトまでの秒数。指定しなかった場合はタイムアウトしません。
@return Ruby 1.9 の頃からのバグで常に true を......返します。(16608)
//emlist[例][ruby]{
require 'monitor'
m = Monitor.new
cv = Thread::ConditionVariable.new
m.enter
m.wait_for_cond(cv, 1)
//}... -
Monitor
# mon _ synchronize { . . . } -> object (21006.0) -
モニターをロックし、ブロックを実行します。実行後に必ずモニターのロックを解放します。
...モニターをロックし、ブロックを実行します。実行後に必ずモニターのロックを解放します。
ブロックの評価値を返り値として返します。
@see Monitor#enter... -
Monitor
# synchronize { . . . } -> object (21006.0) -
モニターをロックし、ブロックを実行します。実行後に必ずモニターのロックを解放します。
...モニターをロックし、ブロックを実行します。実行後に必ずモニターのロックを解放します。
ブロックの評価値を返り値として返します。
@see Monitor#enter... -
Monitor
# mon _ check _ owner -> nil (21000.0) -
MonitorMixin 用の内部メソッドです。
...MonitorMixin 用の内部メソッドです。
@raise ThreadError ロックを持っていないスレッドが呼びだした場合に発生します... -
Monitor
# mon _ locked? -> bool (21000.0) -
モニターがロックされているときに true を返します。
モニターがロックされているときに true を返します。 -
Monitor
# mon _ owned? -> bool (21000.0) -
カレントスレッドがモニターをロックしているときに true を返します。
カレントスレッドがモニターをロックしているときに true を返します。 -
Monitor
# mon _ try _ enter -> bool (21000.0) -
モニターのロックを取得しようと試みます。 ロックに成功した(ロックが開放状態だった、もしくは ロックを取得していたスレッドが自分自身であった)場合には 真を返します。
モニターのロックを取得しようと試みます。
ロックに成功した(ロックが開放状態だった、もしくは
ロックを取得していたスレッドが自分自身であった)場合には
真を返します。
ロックができなかった場合は偽を返し、実行を継続します。この場合には
スレッドはブロックしません。 -
Monitor
# try _ enter -> bool (21000.0) -
MonitorMixin#mon_try_enter の別名です。
...MonitorMixin#mon_try_enter の別名です。...モニターのロックを取得しようと試みます。
ロックに成功した(ロックが開放状態だった、もしくは
ロックを取得していたスレッドが自分自身であった)場合には
真を返します。
ロックができなかった場合は偽を返し、実行を継続します。この場合には
スレッドはブロックしません。