/* - Creazione di thread con pthread_create - Passaggio ai thread di una struttura con valori diversi per ogni thread - Passaggio di un valore di ritorno tra i thread e il main - Attesa di thread con pthread_join */ #include #include #include #include #define N_THREAD 3 /* Variabile globale, tutti i thread vedono questo valore, se un thread ne modifica il valore anche gli altri thread lo vedono modificato */ int global_variable = 10; typedef struct { int thread_num; char letter; } my_t; static void *process (void *arg) { int i; my_t *param = (my_t *) arg; // cast the void argument to the real type if (param->thread_num == 0) global_variable = 20; fprintf (stdout, "Starting thread %d, letter=%c, global_variable=%d\n", param->thread_num, param->letter, global_variable); for (i = 0; i < 10; i++) write (STDOUT_FILENO, &(param->letter), 1); /* Di default quando un processo viene lanciato vengono aperti i file descriptor 0, 1 e 2, ed associati rispettivamente a stdin, stdout e stderr */ printf("\n"); param->letter = toupper(param->letter); pthread_exit(&(param->letter)); } int main (void) { int retcode; pthread_t th[N_THREAD]; char *retval; my_t value[N_THREAD]; int i = 0; for(i=0; i