Allowing at most N-1 philosophers to be sitting
semaphore Chopstick[N] = 1, Sitting = N-1; Philosopher(Index): do { wait(Sitting) wait(Chopstick[Index]) wait(Chopstick[(Index+1) % N) Eat signal(Chopstick[(Index+1) % N) signal(Chopstick[Index]) signal(Sitting) Think } forever