クラス
- Thread (48)
-
Thread
:: ConditionVariable (24) -
Thread
:: Queue (36) -
Thread
:: SizedQueue (36)
キーワード
- ConditionVariable (12)
- Monitor (12)
- MonitorMixin (12)
-
NEWS for Ruby 2
. 3 . 0 (10) -
NEWS for Ruby 2
. 5 . 0 (8) -
NEWS for Ruby 2
. 6 . 0 (7) -
NEWS for Ruby 2
. 7 . 0 (6) -
NEWS for Ruby 3
. 0 . 0 (5) - Queue (12)
- SizedQueue (12)
- TCPServer (12)
- WIN32OLE (12)
-
backtrace
_ locations (24) - broadcast (12)
-
caller
_ locations (24) - deq (24)
- drb (12)
-
drb
/ extservm (12) -
drb
/ gw (12) - fork (12)
-
net
/ imap (12) -
pipeline
_ start (24) - pop (24)
-
rb
_ thread _ start (12) -
rb
_ thread _ start _ 0 (12) -
rb
_ thread _ start _ timer (12) -
rinda
/ rinda (12) -
ruby 1
. 6 feature (12) -
ruby 1
. 8 . 4 feature (12) - shift (24)
- signal (12)
- timeout (21)
- セキュリティモデル (12)
検索結果
先頭5件
-
Thread
. start(*arg) {|*arg| . . . } -> Thread (24233.0) -
スレッドを生成して、ブロックの評価を開始します。 生成したスレッドを返します。
...スレッドを生成して、ブロックの評価を開始します。
生成したスレッドを返します。
基本的に Thread.new と同じですが、
new メソッドと違い initialize メソッドを呼びません。
@param arg 引数 arg はそのままブロックに渡されま......始と同時にその
スレッド固有のローカル変数に値を渡すために使用します。
@raise ThreadError 現在のスレッドが属する ThreadGroup が freeze されている場合に発生します。またブロックを与えられずに呼ばれた場合にも発......ードは間違いです。スレッドの実行が開始される前に
変数 i が書き変わる可能性があるからです。
for i in 1..5
Thread.start { p i }
end
上の例は以下のように書き直すべきです。
for i in 1..5
Thread.start(i) {|t| p t }
end... -
static VALUE rb
_ thread _ start _ 0(VALUE (*fn)() , void *arg , rb _ thread _ t th _ arg) (12300.0) -
-
static VALUE rb
_ thread _ start(VALUE klass , VALUE args) (12200.0) -
-
void rb
_ thread _ start _ timer(void) (12200.0) -
setitimer(2) が存在する場合のみ定義されます。
setitimer(2) が存在する場合のみ定義されます。
Ruby のスレッドスケジューリングに使用している
インターバルタイマーを開始します。 -
Thread
:: ConditionVariable (11042.0) -
スレッドの同期機構の一つである状態変数を実現するクラスです。
...クラスです。
以下も ConditionVariable を理解するのに参考になります。
https://ruby-doc.com/docs/ProgrammingRuby/html/tut_threads.html#UF
=== Condition Variable とは
あるスレッド A が排他領域で動いていたとします。スレッド A は現在空いてい......= Mutex.new
cv = ConditionVariable.new
a = Thread.start {
mutex.synchronize {
...
while (条件が満たされない)
cv.wait(mutex)
end
...
}
}
b = Thread.start {
mutex.synchronize {
# 上の条......。@q が空になった場合、
あるいは満タンになった場合に Condition Variable を使って wait しています。
require 'thread'
class TinyQueue
def initialize(max=2)
@max = max
@full = ConditionVariable.new
@empty = ConditionVariable.new
@mutex... -
Thread
:: SizedQueue # deq(non _ block = false) -> object (11042.0) -
キューからひとつ値を取り出します。 キューに push しようと待っているスレッドがあれば、実行を再開させます。
...開させます。
@param non_block true を与えると、キューが空の時に例外 ThreadError が発生します。
//emlist[例][ruby]{
require 'thread'
q = SizedQueue.new(4)
th1 = Thread.start do
while resource = q.pop
puts resource
end
end
[:resource1, :resource2, :resource3,......e 'thread'
q = SizedQueue.new(4)
th1 = Thread.start do
while 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
# => #<ThreadErr......or: queue empty>
# => "queue empty"
//}
@see Thread::Queue#pop... -
Thread
:: SizedQueue # pop(non _ block = false) -> object (11042.0) -
キューからひとつ値を取り出します。 キューに push しようと待っているスレッドがあれば、実行を再開させます。
...開させます。
@param non_block true を与えると、キューが空の時に例外 ThreadError が発生します。
//emlist[例][ruby]{
require 'thread'
q = SizedQueue.new(4)
th1 = Thread.start do
while resource = q.pop
puts resource
end
end
[:resource1, :resource2, :resource3,......e 'thread'
q = SizedQueue.new(4)
th1 = Thread.start do
while 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
# => #<ThreadErr......or: queue empty>
# => "queue empty"
//}
@see Thread::Queue#pop... -
Thread
:: SizedQueue # shift(non _ block = false) -> object (11042.0) -
キューからひとつ値を取り出します。 キューに push しようと待っているスレッドがあれば、実行を再開させます。
...開させます。
@param non_block true を与えると、キューが空の時に例外 ThreadError が発生します。
//emlist[例][ruby]{
require 'thread'
q = SizedQueue.new(4)
th1 = Thread.start do
while resource = q.pop
puts resource
end
end
[:resource1, :resource2, :resource3,......e 'thread'
q = SizedQueue.new(4)
th1 = Thread.start do
while 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
# => #<ThreadErr......or: queue empty>
# => "queue empty"
//}
@see Thread::Queue#pop... -
Thread
:: ConditionVariable # broadcast -> self (11040.0) -
状態変数を待っているスレッドをすべて再開します。再開された スレッドは 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 {
puts......"a1"
while (flg)
cv.wait(mutex)
end
puts "a2"
}
}
}
Thread.start {
mutex.synchronize {
flg = false
cv.broadcast
}
}
sleep 1
# => a1
# => a1
# => a1
# => a2
# => a2
# => a2
//}... -
Thread
:: ConditionVariable # signal -> self (11040.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 {
puts......"a1"
while (flg)
cv.wait(mutex)
end
puts "a2"
}
}
}
Thread.start {
mutex.synchronize {
flg = false
cv.signal
}
}
sleep 1
# => a1
# => a1
# => a1
# => a2
//}... -
Thread
:: Queue # deq(non _ block = false) -> object (11036.0) -
キューからひとつ値を取り出します。キューが空の時、呼出元のスレッドは停止します。
...ドは停止します。
@param non_block true を与えると、キューが空の時に例外 ThreadError が発生します。
//emlist[例][ruby]{
require 'thread'
q = Queue.new
th1 = Thread.start do
while resource = q.pop
puts resource
end
end
[:resource1, :resource2, :resource3, n......hread'
q = Queue.new
th1 = Thread.start do
while 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
end
# => resource1
# resource2
# resource3
# => #<ThreadError: queue empty>
# => "q... -
Thread
:: Queue # pop(non _ block = false) -> object (11036.0) -
キューからひとつ値を取り出します。キューが空の時、呼出元のスレッドは停止します。
...ドは停止します。
@param non_block true を与えると、キューが空の時に例外 ThreadError が発生します。
//emlist[例][ruby]{
require 'thread'
q = Queue.new
th1 = Thread.start do
while resource = q.pop
puts resource
end
end
[:resource1, :resource2, :resource3, n......hread'
q = Queue.new
th1 = Thread.start do
while 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
end
# => resource1
# resource2
# resource3
# => #<ThreadError: queue empty>
# => "q... -
Thread
:: Queue # shift(non _ block = false) -> object (11036.0) -
キューからひとつ値を取り出します。キューが空の時、呼出元のスレッドは停止します。
...ドは停止します。
@param non_block true を与えると、キューが空の時に例外 ThreadError が発生します。
//emlist[例][ruby]{
require 'thread'
q = Queue.new
th1 = Thread.start do
while resource = q.pop
puts resource
end
end
[:resource1, :resource2, :resource3, n......hread'
q = Queue.new
th1 = Thread.start do
while 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
end
# => resource1
# resource2
# resource3
# => #<ThreadError: queue empty>
# => "q... -
Thread
:: SizedQueue (11034.0) -
サイズの最大値を指定できる Thread::Queue です。
...る Thread::Queue です。
=== 例
283 より。q をサイズ 1 の SizedQueue オブジェクトに
することによって、入力される行と出力される行が同じ順序になります。
q = [] にすると入力と違った順序で行が出力されます。
require 'thread'......q = SizedQueue.new(1)
th = Thread.start {
while line = q.pop
print line
end
}
while l = gets
q.push(l)
end
q.push(l)
th.join... -
Thread
:: Queue (11024.0) -
Queue はスレッド間の FIFO(first in first out) の通信路です。ス レッドが空のキューを読み出そうとすると停止します。キューになんら かの情報が書き込まれると実行は再開されます。
...実行は再開されます。
最大サイズが指定できる Queue のサブクラス Thread::SizedQueue も提供されています。
=== 例
require 'thread'
q = Queue.new
th1 = Thread.start do
while resource = q.pop
puts resource
end
end
[:resource1, :resource2,... -
Thread
# backtrace _ locations(start = 0 , length = nil) -> [Thread :: Backtrace :: Location] | nil (9255.0) -
スレッドの現在のバックトレースを Thread::Backtrace::Location の配 列で返します。
...スレッドの現在のバックトレースを Thread::Backtrace::Location の配
列で返します。
引数で指定した値が範囲外の場合、スレッドがすでに終了している場合は nil
を返します。
@param start 開始フレームの位置を数値で指定します......似ていますが、本メソッドは self に限定
した情報を返します。
//emlist[例][ruby]{
thread = Thread.new { sleep 1 }
thread.run
thread.backtrace_locations # => ["/path/to/test.rb:1:in `sleep'", "/path/to/test.rb:1:in `block in <main>'"]
//}
@see Thread::Backtrace::Location... -
Thread
# backtrace _ locations(range) -> [Thread :: Backtrace :: Location] | nil (9155.0) -
スレッドの現在のバックトレースを Thread::Backtrace::Location の配 列で返します。
...スレッドの現在のバックトレースを Thread::Backtrace::Location の配
列で返します。
引数で指定した値が範囲外の場合、スレッドがすでに終了している場合は nil
を返します。
@param start 開始フレームの位置を数値で指定します......似ていますが、本メソッドは self に限定
した情報を返します。
//emlist[例][ruby]{
thread = Thread.new { sleep 1 }
thread.run
thread.backtrace_locations # => ["/path/to/test.rb:1:in `sleep'", "/path/to/test.rb:1:in `block in <main>'"]
//}
@see Thread::Backtrace::Location... -
Thread
. fork(*arg) {|*arg| . . . } -> Thread (9133.0) -
スレッドを生成して、ブロックの評価を開始します。 生成したスレッドを返します。
...スレッドを生成して、ブロックの評価を開始します。
生成したスレッドを返します。
基本的に Thread.new と同じですが、
new メソッドと違い initialize メソッドを呼びません。
@param arg 引数 arg はそのままブロックに渡されま......始と同時にその
スレッド固有のローカル変数に値を渡すために使用します。
@raise ThreadError 現在のスレッドが属する ThreadGroup が freeze されている場合に発生します。またブロックを与えられずに呼ばれた場合にも発......ードは間違いです。スレッドの実行が開始される前に
変数 i が書き変わる可能性があるからです。
for i in 1..5
Thread.start { p i }
end
上の例は以下のように書き直すべきです。
for i in 1..5
Thread.start(i) {|t| p t }
end...