rubyとスレッドと大域変数
そうかrubyにはスレッドがあった。
#!/usr/bin/ruby def foo(a) sleep rand(5) puts a end Thread.fork{ foo("1")} Thread.fork{ foo("2")} Thread.fork{ foo("3")} foo("0")
結果
$ ruby thread.rb 0 $ ruby thread.rb 3 2 1 0 $ ruby thread.rb 2 0
見事に親スレッドが終了すると全部落ちてる
ということでwaitはjoinで実装されている
#!/usr/bin/ruby def foo(a) sleep rand(5) puts a end a=[] a.push Thread.fork{ foo("1")} a.push Thread.fork{ foo("2")} a.push Thread.fork{ foo("3")} a.each{|i| i.join} foo("0")
結果
$ ruby thread.rb 2 1 3 0 $ ruby thread.rb 1 3 2 0
変数は共有されている
#!/usr/bin/ruby b=2 a=[] a.push Thread.fork{puts b=3} a.each{|i| i.join} #wait puts b
結果
$ ruby thread.rb 3 3