Cuando estamos trabajando bajo C/C++ en Unix, normalmente podríamos tener varias tareas a realizar concurrentemente y que habría que esperar hasta completarlas, una posible solución es utilizar concurrencia de procesos usando fork.
Aquí expongo un ejemplo donde, un proceso padre crea 4 procesos y espera a que terminen, estos procesos, se han creado mediante la función fork , para más info: http://en.wikipedia.org/wiki/Fork_%28operating_system%29
Aquí el código:
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
const int MAX_PROC = 4;
int main(int argc, char *argv[])
{
/* VAR */
pid_t whichone;
int howmany;
int status;
int i = 0;
/* MAIN */
for( ; i < MAX_PROC; i++)
{
if( fork() == 0 )
{
int pid = getpid();
printf("create \n",pid);
sleep( (pid%2==0)?5:10);
return 0;
}
}
i = 0;
while (i < MAX_PROC)
{
whichone=wait(&status);
i++;
printf("estado ",whichone);
if ((status & 0xffff)==0)
printf("end ok \n");
else
printf(" WARNING END ko \n");
}
return 0;
}
La función fork() como bien se puede leer en wikipedia, devuelve 0 si es un hijo, 1 si es el padre y -1 si ha ocurrido un error, la función wait esperará a que todos los hijos terminen.
En este ejemplo, los procesos con pid par se ejecutarán más rápidos, si quieres personalizar este código para tus necesidades, deberás de escribir el código dentro del bucle for, añadiendo las tareas que necesites o bien llamando a fork tantas veces como quieras.
Espero que sirva de ayuda.
Un saludo.