- 締切済み
Perlの並列処理
私は今Perlの並列処理について学んでいます。3並列で子プロセスが行う処理はa1、a2、a3、・・・ak(処理にかかる時間a1<a2<a3<・・・)で、親プロセスはa1、a2、a3、・・・の結果を判定するというものです。 a1、a2、a3と順に判定していきたいと考えているのですが、どのようなプログラムを書けばよいでしょうか。なお、並列処理にはforkを利用するつもりです。 一度以下のようなプログラムを考えたのですが、これだとa1→a3→・・・→ak→親プロセス→a2→a4→・・・→a(k-1)→親プロセスとなってしまいます。よろしくお願いします。 while($count--){ #$countは並列数を入力 my $pid =fork; &child_process; exit; } wait; 【親プロセス】 sub child_process{ while($n<k){ $n=1; 【処理a$nを行う】 $n=$n+$count; } exit; }
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- salsberry
- ベストアンサー率69% (495/711)
質問文中のchild_processの定義だと、ループ中で$n=1を実行してしまっているので何回ループしても行われる処理はa1だけです。それは書き間違いであって本当は$n=1がwhileループの前にあるのだとすると、下記のようになります。 ・$count=3のときにforkした子プロセスはa1→a4→a7→...の処理を行う ・$count=2のときにforkした子プロセスはa1→a3→a5→...の処理を行う これは意図した動作ですか? それともサンプルコードの書き間違いでしょうか? このせいで、 > これだとa1→a3→・・・→ak→親プロセス→a2→a4→・・・→a(k-1)→親プロセスとなってしまいます。 この文が何を表しているのかが分からなくなっています。