#include #include #include #include static int x; static sem_t s; void * incrementer(void * tid) { int i = 0; for(i = 0; i < 1000; i++) { sem_wait(&s); x++; // printf("x from incrementer is %d\n", x); sem_post(&s); } pthread_exit(NULL); } void * decrementer(void * tid) { int i = 0; for(i = 0; i < 1000; i++) { sem_wait(&s); x--; // printf("x from decrementer is %d\n", x); sem_post(&s); } pthread_exit(NULL); } int main(int argc, char ** argv) { pthread_t incr, decr; pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setschedpolicy(&attr, SCHED_RR); sem_init(&s, 0, 1); pthread_create(&incr, &attr, incrementer, (void *) 1); pthread_create(&decr, &attr, decrementer, (void *) 2); pthread_join(incr, NULL); pthread_join(decr, NULL); printf("x is %d\n", x); return 0; }