Producer/Consumer (cont.)
consumer should be blocked when buffer is empty
producer should be blocked when buffer is full
producer and consumer should run independently so far as the buffer capacity and contents permit
producer and consumer should never both be updating the buffer at the same instant (otherwise, data integrity cannot be guaranteed)
producer/consumer is a harder problem if there is more than one consumer and/or more than one producer