/* ************************************** * * Updating a global counter, with mutex. * Silvia Figueira -- Winter 09 * ************************************** */ #include #include /* * functions */ void *loop (void *arg); /* * global variables */ pthread_mutex_t mutex; int count = 0; /* * main */ int main ( ) { int i; pthread_t thr[3]; pthread_mutex_init (&mutex, NULL); for (i = 0; i < 3; i++) pthread_create(&thr[i], NULL, loop,(void *) i); for (i = 0; i < 3; i++) pthread_join (thr[i], NULL); printf ("Final: %d\n", count); } /* * loop */ void * loop (void *arg) { int i, j; int threadNo = (int) arg; for (i = 0; i < 100000; i++) { pthread_mutex_lock (&mutex); count++; pthread_mutex_unlock (&mutex); for (j = 0; j < 10000; j++); } printf ("%d: %d\n", threadNo, count); }