#include #include /* Define a mutex and initialize it. */ static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; static int counter = 0; /* A global variable to protect. */ /* Function executed by each thread. */ static void * increment(void *_) { /* Remove the mutex_lock/unlock calls and observe what the program does. Run it several times. */ int i; for (i = 0; i < 1000000; i++) { pthread_mutex_lock(&lock); counter++; pthread_mutex_unlock(&lock); } } int main() { int i; #define NTHREADS 10 pthread_t t[NTHREADS]; for (i = 0; i < NTHREADS; i++) pthread_create(&t[i], NULL, increment, NULL); for (i = 0; i < NTHREADS; i++) pthread_join(t[i], NULL); if (counter != NTHREADS * 1000000) printf("Something went wrong, counter is %d\n", counter); else printf("Correct. counter value is %d\n", counter); }