Programmazione con thread in C
Creazione e gestione dei thread
pid_t fork()
pid_t wait(int *)
pthread_create(...)
#include <pthread.h>
#include <stdio.h>
Funzione thread tf1
void * tf1(void *tID) // questa è la thread_function
{
int conta =0; // conta è una variabile locale
conta++;
printf("sono thread n: %d; conta = %d \n",(int) tID, conta);
return NULL;
}
Programma principale
int main(void) {
pthread_t tID1;
pthread_t tID2;
pthread_create(&tID1, NULL, &tf1, (void *)1);
pthread_create(&tID2, NULL, &tf1, (void *)2);
pthread_join(tID1, NULL);
pthread_join(tID2, NULL);
return 0;
}
Possibili output
- Sono thread 1, conta=1
- Sono thread 2, conta=1
- Oppure: Sono thread 2, conta=1
- Sono thread 1, conta=1
Funzione thread tf1 con argomento
#include <pthread.h>
#include <stdio.h>
void * tf1(void *arg) {
int i = * ((int*) arg);
printf("sono thread_function: valore argomento= %d \n", i);
i ++;
return (void *) i;
}
Programma principale con argomento
int main(void) {
int argomento=10;
int thread_exit;
pthread_t tID1;
pthread_create(&tID1, NULL, &tf1, &argomento);
pthread_join(tID1, (void *) &thread_exit);
printf("sono il main; thread_exit= %d\n", thread_exit);
return 0;
}
Funzioni thread annidate
#include <pthread.h>
#include <stdio.h>
void * tf1(void *arg) {
void * tf2(void *arg) {
printf("x");
printf("y");
printf("z");
printf("a");
printf("b");
printf("c");
return NULL;
}
return NULL;
}
Programma principale per funzioni annidate
int main(void) {
pthread_t tID1;
pthread_t tID2;
pthread_create(&tID1, NULL, &tf1, NULL);
pthread_create(&tID2, NULL, &tf2, NULL);
pthread_join(tID1, NULL);
pthread_join(tID2, NULL);
printf("\nfine\n");
return 0;
}
Transferimento valori tra conti
#include <pthread.h>
#include <stdio.h>
// int contoA=100, contoB=200;
5. int totale;
// void * trasferisci(void *arg) {
int importo=*((int*)arg);
int cA,cB;
// inizio sequenza critica
cA = contoA; // leggi contoA in variabile locale
cB = contoB; // leggi contoB in variabile locale
contoA = cA + importo;
contoB = cB - importo;
// fine sequenza critica
return NULL;
}
Programma principale per trasferimento valori
// int main(void) {
pthread_t tID1;
pthread_t tID2;
int importo1=10, importo2=20;
pthread_create(&tID1, NULL, &trasferisci, &importo1);
pthread_create(&tID2, NULL, &trasferisci, &importo2);
pthread_join(tID1, NULL);
pthread_join(tID2, NULL);
totale=contoA + contoB;
printf("contoA = %d contoB = %d\n", contoA, contoB);
printf("il totale è %d\n", totale);
return 0;
}
contoA = contoA + importo
contoB = contoB - importo
int favorito = 1;
int bloc
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Architettura dei calcolatori
-
Appunti completi di Architettura dei calcolatori e sistemi operativi
-
Appunti di Architettura - Parte Sistemi Operativi con spiegazioni semplicissime
-
architettura