Producer: idle → wait(empty) → wait(mutex) → add_item → signal(mutex) → signal(full)
Consumer: idle → wait(full) → wait(mutex) → remove_item → signal(mutex) → signal(empty)
Producer: idle
Consumer: idle
Buffer: Empty
Buffer Lock: Unlocked
mutex: 1 (Controls buffer access)
empty: 8 (Available slots)
full: 0 (Occupied slots)