deadlock.c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
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;
}