クラス
- Monitor (42)
-
MonitorMixin
:: ConditionVariable (24) - Mutex (8)
- Thread (48)
-
Thread
:: Mutex (40) -
Thread
:: Queue (36) -
Thread
:: SizedQueue (69) - ThreadGroup (24)
モジュール
- MonitorMixin (24)
-
Mutex
_ m (24)
検索結果
先頭5件
-
Thread
:: SizedQueue # pop(non _ block = false) -> object (13.0) -
キューからひとつ値を取り出します。 キューに push しようと待っているスレッドがあれば、実行を再開させます。
...待っているスレッドがあれば、実行を再開させます。
@param non_block true を与えると、キューが空の時に例外 ThreadError が発生します。
//emlist[例][ruby]{
require 'thread'
q = SizedQueue.new(4)
th1 = Thread.start do
while resource = q.pop
puts re......resource = q.pop
puts resource
end
end
[:resource1, :resource2, :resource3, nil].each{|r|
q.push(r)
}
begin
th1.join
q.pop(true)
rescue => e
p e
p e.message
end
# => resource1
# resource2
# resource3
# => #<ThreadError: queue empty>
# => "queue empty"
//}
@see Thread::Queue#pop... -
Thread
:: SizedQueue # shift(non _ block = false) -> object (13.0) -
キューからひとつ値を取り出します。 キューに push しようと待っているスレッドがあれば、実行を再開させます。
...待っているスレッドがあれば、実行を再開させます。
@param non_block true を与えると、キューが空の時に例外 ThreadError が発生します。
//emlist[例][ruby]{
require 'thread'
q = SizedQueue.new(4)
th1 = Thread.start do
while resource = q.pop
puts re......resource = q.pop
puts resource
end
end
[:resource1, :resource2, :resource3, nil].each{|r|
q.push(r)
}
begin
th1.join
q.pop(true)
rescue => e
p e
p e.message
end
# => resource1
# resource2
# resource3
# => #<ThreadError: queue empty>
# => "queue empty"
//}
@see Thread::Queue#pop... -
Monitor
# enter -> () (7.0) -
モニターをロックします。
...されません。
//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; recursive locking (ThreadError)
//}... -
Monitor
# mon _ check _ owner -> nil (7.0) -
MonitorMixin 用の内部メソッドです。
...MonitorMixin 用の内部メソッドです。
@raise ThreadError ロックを持っていないスレッドが呼びだした場合に発生します... -
Monitor
# mon _ enter -> () (7.0) -
モニターをロックします。
...されません。
//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; recursive locking (ThreadError)
//}... -
MonitorMixin
# mon _ enter -> () (7.0) -
モニターをロックします。
...。
//emlist[例][ruby]{
require 'monitor'
buf = []
buf.extend(MonitorMixin)
buf.mon_enter
buf.mon_enter
//}
Mutex#lock ではデッドロックが起きます。
//emlist[Mutex でデッドロックする例][ruby]{
m = Mutex.new
m.lock
m.lock # => deadlock; recursive locking (ThreadError)
//}... -
MonitorMixin
# mon _ exit -> () (7.0) -
モニターのロックを解放します。
...を
呼ばなければモニターは解放されません。
モニターが解放されればモニターのロック待ちになっていた
スレッドが一つ実行を再開します。
@raise ThreadError ロックを持っていないスレッドが呼びだした場合に発生します... -
MonitorMixin
:: ConditionVariable # wait(timeout = nil) -> bool (7.0) -
モニタのロックを開放し、現在のスレッドを停止します。
...e を返します。
@param timeout タイムアウトまでの秒数。指定しなかった場合はタイムアウトしません。
@raise ThreadError ロックを持っていないスレッドがこのメソッドを呼びだした場合に発生します
@see MonitorMixin::ConditionVariable... -
MonitorMixin
:: ConditionVariable # wait _ while { . . . } -> () (7.0) -
モニタのロックを開放し、現在のスレッドを ブロックで指定した条件を満たしている間停止します。
...ってこのメソッドから抜け処理を継続するか
再びロックを開放しスレッドを停止するかを決めます。
@raise ThreadError ロックを持っていないスレッドがこのメソッドを呼びだした場合に発生します
@see MonitorMixin::ConditionVariable#... -
Mutex
# lock -> self (7.0) -
mutex オブジェクトをロックします。一度に一つのス レッドだけが mutex をロックできます。既にロックされている mutex に対してロックを行おうとしたスレッドは mutex のロックが解放さ れるまで、実行が停止されます。
...x
に対してロックを行おうとしたスレッドは mutex のロックが解放さ
れるまで、実行が停止されます。
@raise ThreadError self 既にカレントスレッドにロックされている場合に発
生します。
また、Signa... -
Mutex
# sleep(timeout = nil) -> Integer (7.0) -
与えられた秒数の間ロックを解除してスリープして、実行後にまたロックします。
...する秒数を指定します。省略するとスリープし続けます。
@return スリープしていた秒数を返します。
@raise ThreadError 自身がカレントスレッドによってロックされていない場合に発生します。
[注意] 2.0 以降ではスリープ中... -
Mutex
# synchronize { . . . } -> object (7.0) -
mutex をロックし、ブロックを実行します。実行後に必ず mutex のロックを解放します。
...実行します。実行後に必ず mutex のロックを解放します。
ブロックが最後に評価した値を返します。
@raise ThreadError self 既にカレントスレッドにロックされている場合に発
生します。
また、Signal... -
Mutex
_ m # mu _ unlock -> () (7.0) -
ロックを解放します。ロック待ちになっていたスレッドの実行は再開されます。
...ロックを解放します。ロック待ちになっていたスレッドの実行は再開されます。
@raise ThreadError ロックされていない場合に unlock を呼ぶと発生します...