#include #include #include pthread_mutex_t mutex_score = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t mutex_counter = PTHREAD_MUTEX_INITIALIZER; int score = 0; int counter = 0; void *thread_func1(void *arg) { while (counter < 1000000) { pthread_mutex_lock(&mutex_score); pthread_mutex_lock(&mutex_counter); counter++; score++; pthread_mutex_unlock(&mutex_score); pthread_mutex_unlock(&mutex_counter); printf("Score: %d\n", score); } return 0; } void *thread_func2(void *arg) { while (counter < 1000000) { pthread_mutex_lock(&mutex_counter); pthread_mutex_lock(&mutex_score); score--; counter++; pthread_mutex_unlock(&mutex_counter); pthread_mutex_unlock(&mutex_score); printf("Score: %d\n", score); } return 0; } int main(int argc, char* argv[]) { pthread_t thread1, thread2; pthread_create(&thread1, NULL, thread_func1, NULL); pthread_create(&thread2, NULL, thread_func2, NULL); pthread_join(thread1, NULL); pthread_join(thread2, NULL); printf("Thread %d wins!\n", score > 0 ? 1 : 2); return 0; }