Continuazione di quanto detto nella discussione "[C] Somma per righe numeri matrice"
Ora pero ci sono le thread. (per prima parte del codice C vedi: "[C] Somma per righe numeri matrice")

Testo:

codice:
Scrivere un programma C che sfrutti le thread POSIX (Pthread) per effettuare in parallelo la somma
 di 12.800 numeri interi casuali. Tali numeri devono essere memorizzati, uno per riga, in un file
 passato al programma tramite linea di comando.
 Il main deve creare una prima thread di inizializzazione il cui obiettivo consiste nel copiare i numeri
 dal file all’interno di 128 array (100 numeri per ogni array), e nell’inizializzare a 0 una variabile
 counter.
 Il main, attesa la terminazione della thread di inizializzazione, deve creare 128 ulteriori thread T[i],
 con 0<= i <128, una per ogni array, il cui obbiettivo consiste innanzitutto nel calcolare la somma
 S[i] dei 100 interi memorizzati nel corrispondente array A[i]. Pertanto, dopo la fase di
 inizializzazione il programma deve procedere come segue:
     1. Ciascuna thread T[i] con 0<= i <128 calcola la somma S[i] degli elementi contenuti
         nell’array A[i].
     2. Ciascuna thread T[i] con 0<= i <64, rimane attiva e aggiunge a S[i] la somma
         S[i+64] eseguita dalla thread T[i+64]. Ad esempio, la thread T[0] somma a S[0] il
         valore S[64] calcolato dalla thread T[64], la thread T[1] somma a S[1] il valore
         S[65] calcolato dalla thread T[65], etc.
     3. Ciascuna thread T[i] con 64<= i <128, termina la propria esecuzione.
     4. I passi 2 e 3 devono esser ripetuti considerando questa volta le 64 thread rimaste attive.
         Pertanto, ciascuna thread T[i] con 0<= i <32, rimane attiva e aggiunge a S[i] la somma
         S[i+32] eseguita dalla thread T[i+32] mentre le thread T[i] con 32<= i <64,
         terminano la propria esecuzione.
     5. Il passo 4 va ripetuto ricorsivamente, fino a quando rimane una sola thread (la numero 0), che
         di conseguenza conterrà la somma totale dei 12.800 numeri iniziali.
 Durante i passi 2-5, ciascuna thread deve incrementare di una unità la variabile condivisa counter
 ogni volta che viene effettuata una somma. La variabile deve essere modificata dalle thread in modo
 mutuamente esclusivo.

Il main attesa la terminazione di tutte le thread dovrà stampare la somma dei 128.000 numeri e il
valore della variabile counter.
Come posso risolverlo?