Facebook Pixel

Exercise: Producer/Consumer

This exercise puts the producer/consumer lesson into code.

Scenario

Model the core producer/consumer rendezvous as a single-threaded, deterministic simulation. The buffer holds at most three items in FIFO order. Rather than blocking a thread, it reports the boundary conditions — a full buffer rejects new items, and an empty buffer reports that there is nothing to consume.

Commands

CommandBehaviorOutput
["produce", item]Attempt to add item to the back of the buffer"produced <item> (<newSize>/3)", or "full: <item> rejected" if the buffer already holds three items
["consume"]Remove the front item from the buffer"consumed <item> (<newSize>/3)", or "empty" if the buffer holds nothing
["size"]Report the current number of items"Size: <n>"

A rejected produce leaves the buffer unchanged. A failed consume leaves the buffer unchanged.

Example
Input
7
produce apple
produce banana
produce cherry
produce grape
consume
size
consume
Output
produced apple (1/3)
produced banana (2/3)
produced cherry (3/3)
full: grape rejected
consumed apple (2/3)
Size: 2
consumed banana (1/3)
Explanation

The first three produces fill the buffer to capacity, with sizes going from 1/3 to 3/3. The fourth produce of grape finds the buffer full and is rejected, leaving the buffer unchanged. The first consume removes apple from the front (FIFO order) and the buffer drops to 2/3. size reports 2. The next consume removes banana, leaving 1/3.

Your task

Implement the skeleton in the editor below so the commands produce the output described above.

Invest in Yourself
Your new job is waiting. 83% of people that complete the program get a job offer. Unlock unlimited access to all content and features.
Go Pro