Listing 1: Simple (and incorrect) solution to the DPP implemented with Win32 API. The explicit fork flags are superfluous in this solution because they are replaced by the internal counters of the mutexes

 1 enum { N = 5};                      // number of dining philosophers
 2 static HANDLE fork[N];            // model forks as mutex semaphores
 3
 4 void think(long n) {. . . }      // called when philosopher n thinks
 5 void eat(long n) { . . . }         // called when philosopher n eats
 6
 7 long WINAPI philosopher(long n) {          // task for philosopher n
 8    for (;;) {                       // philosopher task runs forever
 9       think(n);          // first the philosopher thinks for a while
10                  // after thinking the philosopher becomes hungry...
11       WaitForSingleObject(fork[(n+1)%N], INFINITE); // get left fork
12       WaitForSingleObject(n], INFINITE);           // get right fork
13       eat(n);                 // got both forks, can eat for a while
14       ReleaseMutex(fork[(n+1)%N]);              // release left fork
15       ReleaseMutex(fork[n]);                   // release right fork
16    }
17    return 0;
18 }