Salve a tutti, cercando di risolvere un esercizio banale sui thread (vi allego il testo)
Una variabile intera x, inizializzata a 0, è condivisa tra 3 thread A, B e C. Ogni thread:
1. attende un numero casuale di ms
2. se la variabile condivisa x < 500 allora incrementa x altrimenti va al punto 5
3. incrementa una variabile locale hit
4. torna al punto 1
5. mostra a schermo il valore di hit e termina la propria esecuzione
Il programma termina quando tutti i thread hanno terminato la propria esecuzione.
Implementare il sistema descritto proteggendo opportunamente la variabile x dagli accessi concorrenti.
Dopo averlo scritto e compilato, l'eseguibile non fa vedere i processi di incremento della x, ma solamente le scritte di attesa. Sapreste dirmi cosa sbaglio dato che non sono molto pratico col C? Grazie mille in anticipo
(ho allegato solamente una funzione per snellire il codice, dato che sono tutte e 3 identiche, eccetto per il nome delle variabili)codice:#include<pthread.h> #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<time.h> int x = 0; pthread_t a,b,c; pthread_mutex_t mutex; void * function_a(){ int casual_ms = rand() % 100; printf("Attendo %d ms..",casual_ms); int hit_a = 0; usleep(casual_ms); if (x < 500 ){ pthread_mutex_lock(&mutex); x++; pthread_mutex_unlock(&mutex); hit_a++; } else printf("Valore di hit_a: %d \n... Sto uscendo\n", hit_a); pthread_exit(NULL); } int main (){ //srand(time(NULL)); pthread_mutex_init(&mutex,NULL); pthread_create(&a,NULL,(void*)function_a,NULL); pthread_create(&b,NULL,(void*)function_b,NULL); pthread_create(&c,NULL,(void*)function_c,NULL); pthread_join(a,NULL); pthread_join(b,NULL); pthread_join(c,NULL); return 0; }

Rispondi quotando