私は、生産者/消費者問題の次の解決策が機能しないことを示しようとしています.消費者が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;