Estratto del documento

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

Anteprima
Vedrai una selezione di 10 pagine su 306
Architettura dei calcolatori e sistemi operativi - Appunti Pag. 1 Architettura dei calcolatori e sistemi operativi - Appunti Pag. 2
Anteprima di 10 pagg. su 306.
Scarica il documento per vederlo tutto.
Architettura dei calcolatori e sistemi operativi - Appunti Pag. 6
Anteprima di 10 pagg. su 306.
Scarica il documento per vederlo tutto.
Architettura dei calcolatori e sistemi operativi - Appunti Pag. 11
Anteprima di 10 pagg. su 306.
Scarica il documento per vederlo tutto.
Architettura dei calcolatori e sistemi operativi - Appunti Pag. 16
Anteprima di 10 pagg. su 306.
Scarica il documento per vederlo tutto.
Architettura dei calcolatori e sistemi operativi - Appunti Pag. 21
Anteprima di 10 pagg. su 306.
Scarica il documento per vederlo tutto.
Architettura dei calcolatori e sistemi operativi - Appunti Pag. 26
Anteprima di 10 pagg. su 306.
Scarica il documento per vederlo tutto.
Architettura dei calcolatori e sistemi operativi - Appunti Pag. 31
Anteprima di 10 pagg. su 306.
Scarica il documento per vederlo tutto.
Architettura dei calcolatori e sistemi operativi - Appunti Pag. 36
Anteprima di 10 pagg. su 306.
Scarica il documento per vederlo tutto.
Architettura dei calcolatori e sistemi operativi - Appunti Pag. 41
1 su 306
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Dolceck di informazioni apprese con la frequenza delle lezioni di Architettura dei calcolatori e sistemi operativi e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Politecnico di Milano o del prof Pelegatti Giuseppe.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community