Wie warte ich, bis der untergeordnete Prozess die Variable im übergeordneten Prozess festgelegt hat?

 use Parallel::ForkManager;    
 my $number_running = 0;
 my $pm = new Parallel::ForkManager(30); 
 $pm->run_on_start( sub { ++$number_running; } );
 $pm->run_on_finish( sub { --$number_running; } );
 for (my $i=0; $i<=100; $i++)
 {
     if ($number_running == 5) { while ($number_running > 0) {} }  # waits forever
     $pm->start and next;
     print $i;
     $pm->finish;
 }

Der obige Code verwendetParallel :: ForkManager zum Ausführen von Code in einer for-Schleife mit parallelen Prozessen. Es wird gezählt, wie viele untergeordnete Prozesse ausgeführt werden, und das @ festgeleg$number_running Variable entsprechend. Sobald 5 untergeordnete Prozesse ausgeführt werden, möchte ich warten, bis 0 untergeordnete Prozesse ausgeführt werden, bevor ich fortfahre.

Die erste Zeile in der for-Schleife dient dazu, dies zu erreichen, wartet jedoch ewig auf diese Zeile. Es ist, als ob die von den untergeordneten Prozessen vorgenommene Änderung der Variablen für diese Codezeile nicht verfügbar ist. Was mache ich falsch? Hinweis: Mir ist @ bekannwait_all_children aber ich möchte es nicht benutzen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage