#include /* secondo esempio */ #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[1000]; 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<1000; i++)/* crea 10 threads */ { if (pthread_create(&tid[i], NULL, thread, NULL) < 0) { printf("Error: thread cannot be created"); exit(1); } for (i=0; i<1000; i++) pthread_join(tid[i], NULL); printf("valore finale di x = %d\n", x); exit(0); }