#include #include #include #define DEBUG 1 #define ITERATIONS 100000 sem_t high_sem, low_sem; int counter = 0; void* high() { while (counter < ITERATIONS) { sem_wait(&high_sem); #if DEBUG printf("%d: HIGH\n", counter); #endif sem_post(&low_sem); counter++; } return NULL; } void* low() { while (counter < ITERATIONS) { sem_wait(&low_sem); #if DEBUG printf("%d: LOW\n", counter); #endif sem_post(&high_sem); counter++; } return NULL; } int main() { pthread_t high_thread, low_thread; sem_init(&high_sem, 0, 1); // high_sem starts sem_init(&low_sem, 0, 0); pthread_create(&high_thread, NULL, high, NULL); pthread_create(&low_thread, NULL, low, NULL); pthread_join(high_thread, NULL); pthread_join(low_thread, NULL); sem_destroy(&high_sem); sem_destroy(&low_sem); return 0; }