種類
- インスタンスメソッド (45)
- 特異メソッド (11)
- クラス (9)
クラス
- Thread (11)
-
Thread
:: ConditionVariable (18) -
Thread
:: Mutex (27)
キーワード
- ConditionVariable (9)
-
handle
_ interrupt (11) - lock (9)
- synchronize (9)
- unlock (9)
- wait (9)
検索結果
先頭5件
-
Thread
:: ConditionVariable # signal -> self (21209.0) -
状態変数を待っているスレッドを1つ再開します。再開された スレッドは Thread::ConditionVariable#wait で指定した mutex のロックを試みます。
...す。再開された
スレッドは Thread::ConditionVariable#wait
で指定した mutex のロックを試みます。
@return 常に self を返します。
//emlist[例][ruby]{
mutex = Mutex.new
cv = ConditionVariable.new
flg = true
3.times {
Thread.start {
mutex.synchronize {
pu......ts "a1"
while (flg)
cv.wait(mutex)
end
puts "a2"
}
}
}
Thread.start {
mutex.synchronize {
flg = false
cv.signal
}
}
sleep 1
# => a1
# => a1
# => a1
# => a2
//}... -
Thread
:: ConditionVariable # wait(mutex , timeout = nil) -> self (3124.0) -
mutex のロックを解放し、カレントスレッドを停止します。 Thread::ConditionVariable#signalまたは、 Thread::ConditionVariable#broadcastで送られたシグナルを 受け取ると、mutexのロックを取得し、実行状態となります。
...mutex のロックを解放し、カレントスレッドを停止します。
Thread::ConditionVariable#signalまたは、
Thread::ConditionVariable#broadcastで送られたシグナルを
受け取ると、mutexのロックを取得し、実行状態となります。
@param mutex Mutex オブ......ます。この場合はシグナルを受け取
らなかった場合でも指定した秒数が経過するとスリープを終了
します。省略するとスリープし続けます。
@see Thread::ConditionVariable#signal, Thread::ConditionVariable#broadcast... -
Thread
. handle _ interrupt(hash) { . . . } -> object (3108.0) -
スレッドの割り込みのタイミングを引数で指定した内容に変更してブロックを 実行します。
...引数で指定した内容に変更してブロックを
実行します。
「割り込み」とは、非同期イベントや Thread#raise や
Thread#kill、Signal.#trap(未サポート)、メインスレッドの終了
(メインスレッドが終了すると、他のスレッドも終了され......してください。
=== 使い方
例:Thread#raise 発生のタイミングを制御する例
th = Thread.new do
Thread.handle_interrupt(RuntimeError => :never) {
begin
# 安全にリソースの割り当てが可能
Thread.handle_interrupt(RuntimeError => :immediate......) {
# ...
}
ensure
# 安全にリソースの解放が可能
end
}
end
Thread.pass
# ...
th.raise "stop"
RuntimeError を無視(延期)している間はリソースの割り当てや ensure
節でリソースの解放を安全に行う事ができ... -
Thread
:: Mutex # lock -> self (3108.0) -
mutex オブジェクトをロックします。一度に一つのス レッドだけが mutex をロックできます。既にロックされている mutex に対してロックを行おうとしたスレッドは mutex のロックが解放さ れるまで、実行が停止されます。
...す。
@raise ThreadError self 既にカレントスレッドにロックされている場合に発
生します。
また、Signal.#trap に指定したハンドラ内で実行
した場合に発生します。
@see Thread::Mutex#unlock... -
Thread
:: Mutex # synchronize { . . . } -> object (3108.0) -
mutex をロックし、ブロックを実行します。実行後に必ず mutex のロックを解放します。
...。
ブロックが最後に評価した値を返します。
@raise ThreadError self 既にカレントスレッドにロックされている場合に発
生します。
また、Signal.#trap に指定したハンドラ内で実行
した... -
Thread
:: Mutex # unlock -> self (3108.0) -
mutex のロックを解放します。mutex のロック待ちになっていたスレッドの実行は再開されます。
...出来ません。
ロックしたスレッド以外から unlock が呼ばれると ThreadError が発生します。
m = Mutex.new
m.lock
Thread.new do
m.unlock # => ThreadError
end.join
@raise ThreadError self がロックされていない場合や self をロックしたス......レッド以外から呼ばれた場合に発生します。
また、Signal.#trap に指定したハンドラ内で実行
した場合に発生します。... -
Thread
:: ConditionVariable (3044.0) -
スレッドの同期機構の一つである状態変数を実現するクラスです。
...変数を実現するクラスです。
以下も ConditionVariable を理解するのに参考になります。
https://ruby-doc.com/docs/ProgrammingRuby/html/tut_threads.html#UF
=== Condition Variable とは
あるスレッド A が排他領域で動いていたとします。スレッド A......b において条件が満たされたなら signal
メソッドでスレッド a に対して条件が成立したことを通知します。これが典型的な
使用例です。
mutex = Mutex.new
cv = ConditionVariable.new
a = Thread.start {
mutex.synchronize {......れない)
cv.wait(mutex)
end
...
}
}
b = Thread.start {
mutex.synchronize {
# 上の条件を満たすための操作
cv.signal
}
}
以下は 14445 で紹介されている例です。@q が空になった場...