複数のスレッドを用いて並行にソートするアルゴリズムをrubyのthreadで実装する

複数のスレッドを用いて並行にソートするアルゴリズムrubyのthreadで実装する

そらでは書けなかったのでまず絵を書いた。


枝番号をキューとして実装したのが以下

require 'thread'
t,q=[],[]
(0..14).each{|i|q[i]=Queue.new}
t[0]=Thread.fork{
  q[4].push(((a=q[0].pop)>(b=q[1].pop))?a:b)
  q[5].push((a>b)?b:a)
}
t[1]=Thread.fork{
  q[6].push(((a=q[2].pop)>(b=q[3].pop))?a:b)
  q[7].push((a>b)?b:a)
}
t[2]=Thread.fork{
  q[8].push(((a=q[4].pop)>(b=q[6].pop))?a:b)
  q[9].push((a>b)?b:a)
}
t[3]=Thread.fork{
  q[10].push(((a=q[5].pop)>(b=q[7].pop))?a:b)
  q[11].push((a>b)?b:a)
}
t[4]=Thread.fork{
  q[13].push(((a=q[9].pop)>(b=q[10].pop))?a:b)
  q[14].push((a>b)?b:a)
}
#main
d=[2,3,1,4]
puts d.join(",")
(0..4).each{|i|q[i].push d[i]}
sleep(1)
puts [q[8].pop,q[13].pop,q[14].pop,q[11].pop].join(",")
t.each{|i|i.join}


結果

>> 2,3,1,4
4,3,2,1
=> true

3つのときの絵を考えなきゃな。