# KDP Exam (2026-02-18) Question 1 Solve the dining philsophers problem by using *signal and continue* monitor discipline and by using *covering condition* technique. Ensure philosphers start eating in the order of their arrival. ## Solution ```c #define N 5 /* number of philosophers */ monitor DiningPhilosophers { enum { THINKING, HUNGRY, EATING }; int phil[N]; cond delay[N]; queue q; bool canEat(int id) { return (phil[(id - 1 + N) % N] != EATING) && (phil[(id + 1) % N] != EATING) } void pickup(int id) { phil[id] = HUNGRY; queue.push(id); while (q.front() != id || ! canEat(id)) delay[id].wait(); q.pop(); phil[id] = EATING; } void putdown(int id) { phil[id] = THINKING; for (int i = 0; i < N; i += 1) delay[i].signal(); } } ```