// Compile with: // // clang -lpthread thread4.c -o thread4 // // This program fixes a problem with thread3.c // #include #include #include #define NTHREADS 10000 int counter = 0; pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER; // Thread with variable arguments void *thread(void *vargp){ pthread_mutex_lock(&mutex1); counter = counter +1; pthread_mutex_unlock(&mutex1); return NULL; } int main(){ // Store our Pthread ID pthread_t tids[NTHREADS]; printf("Counter starts at: %d\n",counter); // Create and execute multiple threads for(int i=0; i < NTHREADS; ++i){ pthread_create(&tids[i], NULL, thread, NULL); } // Create and execute multiple threads for(int i=0; i < NTHREADS; ++i){ pthread_join(tids[i], NULL); } printf("Final Counter value: %d\n",counter); // end program return 0; }