ウィキペディアは、古典的な生産者と消費者の問題の不適切な実装を提供しています。その実装では、コンシューマーは次のように実装されます。
procedure consumer()
{
while (true) {
if (itemCount == 0) {
sleep();
}
item = removeItemFromBuffer();
itemCount = itemCount - 1;
if (itemCount == BUFFER_SIZE - 1) {
wakeup(producer);
}
consumeItem(item);
}
}
プロデューサーへのウェイクアップ コールは、 の場合にのみ送信されitemCount == BUFFER_SIZE - 1
ます。コンシューマがより速く実行された場合 (たとえば、2 回連続してコンシュームする必要がある場合)、それはプロデューサが起動されないことを意味しますか?