rubyでスレッドを用いて検索範囲を分担する
タイトル通り
#!/usr/bin/ruby # 1からnまでの数を配列srcにランダムにセット src=[] nums=(1..20).to_a nums.size.times do src.push(nums.delete_at(rand(nums.size))) end # srcを出力する p src a=[] #一つめのスレッド a.push Thread.fork{ sleep rand(3) #スレッドのスタートずらし用 ret=[] src[0..9].each_with_index{|value,index| ret.push(["No.1",index,value]) if value >= 6 && value <= 8 } p ret } #二つめのスレッド a.push Thread.fork{ sleep rand(3) #スレッドのスタートずらし用 ret=[] src[10..19].each_with_index{|value,index| ret.push(["No.2",index,value]) if value >= 6 && value <= 8 } p ret } a.each{|i| i.join} # 子プロセスをwait
結果
$ ruby thread.rb [17, 1, 12, 19, 16, 6, 4, 14, 2, 18, 15, 5, 7, 9, 11, 3, 10, 20, 13, 8] [["No.2", 2, 7], ["No.2", 9, 8]] [["No.1", 5, 6]] $ ruby thread.rb [18, 19, 6, 10, 16, 9, 4, 13, 7, 11, 5, 8, 15, 17, 2, 12, 3, 1, 20, 14] [["No.1", 2, 6], ["No.1", 8, 7]] [["No.2", 1, 8]]