n As before:
u we need a semaphore S to have mutual
exclusion on buffer access
u we need a semaphore N to synchronize
producer and consumer on the number of
consumable items
n In addition:
u we need a semaphore E to synchronize
producer and consumer on the number of
empty spaces