INTRODUCTION John Trono published a new exercise in concurrent programming [12] with the aim of providing educators with a more challenging problem than simple mutual exclusion: a problem with three distinct process types. His solution is rather complex, using ten semaphores and two global variables. Unfortunately, his solution is incorrect under the usual semantics of concurrent programming which require that a program be correct in any interleaving of the primitive statements of the processes [2]. Once a process has executed a semaphore instruction (either P or Q, there is nothing that requires that the process be scheduled for execution. Thus it is di#cult to get a group of processes to execute "together", which is the behavior required by the problem specification. There are semaphore algorithms that could probably be adapted to solve the problem [9], but these are extremely complex and not suitable for introductory courses in concu