• 締切済み

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; }

みんなの回答

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

質問文中の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)→親プロセスとなってしまいます。 この文が何を表しているのかが分からなくなっています。