我试图证明以下生产者/消费者问题的解决方案不起作用,通过显示当消费者处于 M1 的开头时,有一种情况是它无法在有限范围内使项目出队时间,和/或存在一种情况,即生产者处于 L2 的开头,并且它无法在有限时间内将项目入队。我只是找不到任何例子来证明这一点。
该算法假设有 10 个生产者,10 个消费者,缓冲区大小为 10。
nf = 0; // counting semaphore, # of items in queue
bm = 1; // binary semaphore, ensures mutex
制片人
L1: Produce(item);
L2: P(bm);
If (queue_is_full) {
V(bm);
GoTo L2;
} else {
Enqueue(item);
V(bm);
V(nf);
GoTo L1;
}
消费者
M1: P(nf);
P(bm);
Dequeue(item);
V(bm);
Consume(item);
GoTo M1;