複数のスレッドを用いて並行にソートするアルゴリズムを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つのときの絵を考えなきゃな。