我的代碼是在這裏:http://pastebin.com/Fi3h0E0P爲什麼我的生產者 - 消費者被封鎖?
這裏是輸出
0
Should we take order today (y or n): y
Enter order number: 100
More customers (y or n): n
Stop serving customers right now. Passing orders to cooker:
There are total of 1 order(s)
1
Roger, waiter. I am processing order #100
的目標是服務生必須接受訂單,然後給他們做飯。服務員必須等待廚師完成所有披薩,送披薩,然後接受新的訂單。
我問P-V如何在我以前的文章here中工作。
我不認爲它與\n
消費有什麼關係?我嘗試了各種wait()
的組合,但都沒有工作。
我在哪裏犯了一個錯誤?
主要部分是在這裏:
//Producer process
if(pid > 0)
{
while(1)
{
printf("0");
P(emptyShelf); // waiter as P finds no items on shelf;
P(mutex); // has permission to use the shelf
waiter_as_producer();
V(mutex); // cooker now can use the shelf
V(orderOnShelf); // cooker now can pickup orders
wait();
printf("2");
P(pizzaOnShelf);
P(mutex);
waiter_as_consumer();
V(mutex);
V(emptyShelf);
printf("3 ");
}
}
if(pid == 0)
{
while(1)
{
printf("1");
P(orderOnShelf); // make sure there is an order on shelf
P(mutex); //permission to work
cooker_as_consumer(); // take order and put pizza on shelf
printf("return from cooker");
V(mutex); //release permission
printf("just released perm");
V(pizzaOnShelf); // pizza is now on shelf
printf("after");
wait();
printf("4");
}
}
所以我想這是執行路徑: 進入waiter_as_producer,然後去子進程(電磁爐),然後將控制權轉移回母公司,完成waiter_as_consumer,切換回到孩子。兩個等待切換回父(如我說我嘗試了所有可能的等待()組合...)。
哪個等待操作可以阻止相應的進程? – millimoose
另外,'wait()'做了什麼?如果它是POSIX函數,那麼它不應該是必須的,''P()'也許'V()'應該等待。 – millimoose
,這是頭文件http://pastebin.com/4Jse4bRg和P,V在最後定義。 – User007