生产者 — 消费者问题

有界缓冲区(循环队列),连续动画演示。调快生产→缓冲区填满、生产者阻塞;调快消费→缓冲区排空、消费者阻塞。

empty 空位数
0
生产者 P · 消费者 V
full 产品数
0
消费者 P · 生产者 V
mutex 互斥锁
1
访问缓冲区时 P / V
就绪。
生产者 消费者 产品(已放入,可取) 预定槽(P(empty) 与 V(full) 之间) mutex 占用

蓝色 in 指针指向下一个放入位置,青色 out 指针指向下一个取出位置——这就是循环队列。注意 emptyfull 此消彼长;当一个产品正飞向缓冲区(预定态),它已执行过 P(empty) 但尚未 V(full),这正是 PV 操作之间的瞬时差。