Como esperar que o processo filho defina a variável no processo pai?
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;
}
O código acima usaParallel :: ForkManager para executar código em um loop for usando processos paralelos. Ele está contando quantos processos filhos estão em execução e configurando o$number_running
variável de acordo. Depois que 5 processos filhos estiverem em execução, gostaria que esperasse até que 0 processos filhos estivessem em execução antes de continuar.
A primeira linha no loop for foi projetada para conseguir isso, mas espera eternamente nessa linha. É como se a alteração na variável feita pelos processos filhos não estivesse disponível para essa linha de código. O que estou fazendo errado? Nota: Estou ciente dewait_all_children
mas eu não quero usá-lo.