Corso di Laurea in Ing. Informatica, Universita' La Sapienza
Sistemi Operativi II Docente Roberto Ba
ldoni

Soluzione della domanda di programmazione (argomento: PIPE).

Le operazioni che il thread deve effettuare sono abbastanza semplici:

  1. il primo passo è ottenere lo struct thread_info in cui sono memorizzati i riferimenti della pipe sulla quale scrivere il risultato parziale;
  2. il passo successivo è quello del calcolo della somma degli elementi della riga della matrice:

(codice completo)

void* row_sum(void* arg) {
   struct thread_info *this_info;
   int i, partial_sum=0;
   int status = 0;

   this_info = (struct thread_info *)arg;
   printf("Thread %d: letti i dati di input.\n",this_info->thread_id);

   close(this_info->pipe_fd[0]);
   for (i=0; i<N; i++) {
      partial_sum += this_info->row[i];
      printf("Somma parziale thread %d: %d\n",this_info->thread_id,partial_sum);
   }
   if (write(this_info->pipe_fd[1], &partial_sum, sizeof(int))==-1) {
      printf("Thread %d: errore durante la write.\n", this_info->thread_id);
      status = -1;
   }
   close(this_info->pipe_fd[1]);
   pthread_exit((void*)&status);
}