Di seguito si mostra un esempio del costrutto Fork Join utilizzando le funzioni fork() e wait() del linguaggio C. In particolare sia il processo padre che il processo figlio eseguiranno in parallelo dei calcoli ed in fine il processo padre sommerà i risultati dei calcoli paralleli.
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int potenza(int n, int e){
int k=n;
int i;
printf("1.1 elab. parallela processo figlio\n");
for(i=1;i<e;i++) k=k*n;
return k;
}
int fattoriale(int n){
int k=n;
int i;
printf("1 elab. parallela processo del padre\n");
for(i=n-1;i>0;i--) k=k*i;
return k;
}
int somma(int a, int b){
int k;
printf("2 elab. finale padre \n");
k=(a+b);
return k;
}
int main(){
int x, y, z, retv;
pid_t pid;
pid=fork(); //inizio elaborazione parallela
if(pid == 0){
x=potenza(3,3); //esecuzione parallela calcoli figlio
exit(x); //termina processo figlio
}
else{
y=fattoriale(4); //esecuzione parallela calcoli padre
}
printf(".. join: padre aspetta \n");
wait(&retv); //join: il padre aspetta il figlio
x = WEXITSTATUS(retv); //prende il risultato del figlio
z = somma(x,y); //esegue gli ultimi calcoli
printf("-> risultato finale z = %d \n", z);
}