El caso es que tengo un problema que me está volviendo loco...
Tengo un proceso padre que espera en un bucle por la finalización de los procesos hijos. Algo así como:
Using perl Syntax Highlighting
# We wait until all the children have finished
while($nbProc > 0) {
&waitEndOfChild(\$nbProc);
}
while($nbProc > 0) {
&waitEndOfChild(\$nbProc);
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
donde $nbProc es un contador con el número de procesos hijos todavía ejecutándose.
Y he aquí el código de la función waitEndOfChild, ejecutada por el proceso padre, donde se pone en un bucle a la espera de que sus hijos vayan terminando su ejecución, mediante la función wait():
Using perl Syntax Highlighting
# wait until a child dies and add its subResults into the main one
sub waitEndOfChild {
my $nbProc = $_[0];
my $childPid = wait();
$$nbProc--;
# When a child has finished we add the results generated
# in a temporary dump file into the main hash results.
&FqStatsCore::addSubProcessesResultsToMain($childPid);
}
sub waitEndOfChild {
my $nbProc = $_[0];
my $childPid = wait();
$$nbProc--;
# When a child has finished we add the results generated
# in a temporary dump file into the main hash results.
&FqStatsCore::addSubProcessesResultsToMain($childPid);
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Mi duda es la siguiente: ¿que pasaría en el supuesto caso en que dos o más procesos hijos terminen exactamente - o casi - al mismo tiempo? ¿Intentará el proceso padre acceder en paralelo a la función addSubProcessesResultsToMain o bien, la secuencialidad de ejecución de dicha función está garantizada, hijo por hijo según el orden en que finalizan?
Dicha función addSubProcessesResultsToMain es encargada de incrementar un contador que es gestionado por el padre, y tengo la sospecha de que diversos hijos, al terminar casi al mismo tiempo, hacen que el padre intente actualizar dicha variable muchas veces al mismo tiempo, dando como resultado valores erróneos para dicho contador (un problema análogo al de los mutex o semáforos, pero en este caso, con un solo proceso). Pero como ya he dicho, no son más que suposiciones y todo depende de si la secuencialidad está o no garantizada, cosa que desconozco...
¿Alguien me podría quitar la duda y afirmar/rechazar mis sospechas?
¡¡Muchas gracias por adelantado!!
Un cordial saludo,
Felipe