#include /* secondo esempio: incremento variabile condivisa */ #include #include #include int x = 0; /* variabili globali */ sem_t m; void *thread(void *arg){ /* Thread function */ sem_wait(&m); /* lock m */ x = x + 1; /* sezione critica */ sem_post(&m); /* unlock m */ } void main (){ pthread_t tid[10000]; int i; if (sem_init(&m, 0, 1) == -1) { /* inizializza il semaforo a 1 */ printf("non posso inizializzare il semaforo"); exit(2); } for (i=0; i<10000; i++)/* crea 10000 threads */ { if (pthread_create(&tid[i], NULL, thread, NULL) < 0) { printf("Error: thread cannot be created"); exit(1); } } for (i=0; i<10000; i++) pthread_join(tid[i], NULL); printf("valore finale di x = %d\n", x); exit(0); }