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