it:informatica:posix:threads_esempio1
Return to Home page
If you found any error, or if you want to partecipate to the editing of this wiki, please contact: admin [at] skenz.it
You can reuse, distribute or modify the content of this page, but you must cite in any document (or webpage) this url: https://www.skenz.it/it/informatica/posix/threads_esempio1
Threads Esempio 1
Concetti:
Esempio riguardante le funzionalità principali dei thread POSIX
Testo:
Realizzare un programma di esempio di utilizzo delle funzionalità dei thread
Soluzione:
- threads_esempio1.c
/* - 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 <stdio.h> #include <unistd.h> #include <ctype.h> #include <pthread.h> #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<N_THREAD; i++){ value[i].letter = 'a'+i; } for(i=0; i<N_THREAD; i++){ value[i].thread_num = i; retcode = pthread_create (&th[i], NULL, process, (void *) &(value[i])); if (retcode != 0) fprintf (stderr, "pthread_create failed %d\n", retcode); } for(i=0; i<N_THREAD; i++){ retcode = pthread_join (th[i], (void *)&retval); if (retcode != 0) fprintf (stderr, "pthread_join failed %d\n", retcode); fprintf(stdout, "retval : %c\n", *(retval) ); } return 0; }
Commenti:
If you found any error, or if you want to partecipate to the editing of this wiki, please contact: admin [at] skenz.it
You can reuse, distribute or modify the content of this page, but you must cite in any document (or webpage) this url: https://www.skenz.it/it/informatica/posix/threads_esempio1
/web/htdocs/www.skenz.it/home/data/pages/it/informatica/posix/threads_esempio1.txt · Last modified: 2024/04/08 22:35 by 127.0.0.1