Parallel and high-performance computing

A producer and a consumer communicate through a queue. The producer should add an item without waiting when space is available; the consumer should wait when the queue is empty. Which design best captures this behavior?