#include #include #define MAX_NUMBER 10 #define ODD_NUMBER 5 pthread_mutex_t mutex; pthread_cond_t cond; int turn = 1; // 1 for Thread 1, 2 for Thread 2 void *printOdd(void *arg) { for (int i = 1; i <= MAX_NUMBER; i += 2) { pthread_mutex_lock(&mutex); while (turn != 1) pthread_cond_wait(&cond, &mutex); printf("Thread 1: %d\n", i); turn = 2; if(i==5)return NULL; pthread_cond_signal(&cond); pthread_mutex_unlock(&mutex); } pthread_exit(NULL); } void *printEven(void *arg) { for (int i = 2; i <= MAX_NUMBER; i += 2) { pthread_mutex_lock(&mutex); while (turn != 2) pthread_cond_wait(&cond, &mutex); printf("Thread 2: %d\n", i); turn = 1; pthread_cond_signal(&cond); pthread_mutex_unlock(&mutex); } pthread_exit(NULL); } int main() { pthread_t thread1, thread2; pthread_mutex_init(&mutex, NULL); pthread_cond_init(&cond, NULL); pthread_create(&thread1, NULL, printOdd, NULL); pthread_create(&thread2, NULL, printEven, NULL); pthread_join(thread1, NULL); pthread_join(thread2, NULL); pthread_mutex_destroy(&mutex); pthread_cond_destroy(&cond); return 0; }