【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?

以下の様なプログラムをマルチスレッドでなくマルチプロセスで実現したいです。

#!/usr/bin/ruby
require 'thread'

q=Queue.new
data=%w(a * * * b * * c * * d * *)

data.each do |d|
q.push d
end

(1..4).each do |n|
Thread.start {
while 1 do
d=q.shift
break if d!='*'
end
puts n.to_s+' '+d.to_s
}.join
end

rubyのバーションは
ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin10.0]
です。バージョンをあげる事は、できれば避けたいです。

実際には上記プログラムの【puts n.to_s+' '+d.to_s】してる所は、ネットに繋いで云々の時間のかかる処理なのですが、まったくパラレルに行なっている様子が無いので、マルチプロセス化したら早くなるかなと思いました。
子プロセスを生成して親プロセスとはパイプで繋いで、、などとするのかなあと試行錯誤したのですが、どうもうまくできません。

ご指導の程、よろしくお願い申し上げます。

A 回答 (1件)

> まったくパラレルに行なっている様子が無い



スタートしたスレッドに対して、逐次joinしているからかと。
スレッドの生成と待ち合わせについて見直してみては。

検索すると、すでにいろんな人がその手の記事を書いてるみたいですし。
    • good
    • 0
この回答へのお礼

osamuyさん

ご回答有り難うございました。

お礼日時:2013/06/06 03:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!