經典程序的同步問題

2021-08-28 19:01:38 字數 702 閱讀 5609

五個哲學家共用一張圓桌,分別坐在周圍的五張椅子上,在桌子上有五隻碗和五隻筷子,他們的生活方式是交替地進行思考和進餐。平時,乙個哲學家進行思考,飢餓時便試圖取用其左右最靠近他的筷子,只有在他拿到兩隻筷子時才能進餐。進餐畢,放下筷子繼續思考。

放在桌子上的筷子時臨界資源,在一段時間內只允許一位哲學家使用,為了實現對筷子的互斥使用,可以用乙個訊號量表示乙隻筷子,由這五個訊號量構成訊號量陣列。

semaphore chopstick[5]=;
每個哲學家先拿他左側的筷子,即執行wait(chopstick[i]);成功後再拿他右側的筷子,即執行wait(chopstick[(i+1)%5];便可成功進餐。問題是當五個哲學家都拿完左側筷子後,五個訊號量都為0,再試圖去拿右側的筷子時,都會因無筷子可拿而陷入無限的等待,發生死鎖狀況。

可用的解決方法:

至多只允許有四位哲學家同時去拿左側的筷子,最終能保證至少有一位哲學家能夠進餐,並在用完餐後釋放左右兩支筷子。

僅當哲學家的左、右兩支筷子都可用時,才允許他拿起筷子進餐。

規定奇數號哲學家先拿他左側的筷子,然後再拿右側的筷子;而偶數號哲學家則相反。即:1、2號哲學家競爭1號筷子;3、4號哲學家競爭3號筷子。五位哲學家都先競爭奇數號筷子,獲得後再去競爭偶數號筷子。

使用and型訊號量:第i位哲學家的活動:

dowhile[true];

經典程序的同步問題

若干程序通過有限的共享緩衝區交換資料。其中,生產者 程序不斷寫入,而 消費者 程序不斷讀出 共享緩衝區共有n個 任何時刻只能有乙個程序.可對共享緩衝區進行操作。1 在訪問公共緩衝區的時候,程序之間是互斥的 2 當緩衝區為空時,消費者 程序不能讀出 3 當緩衝區為滿時,生產者 程序不能寫入 semap...

經典程序同步問題

文章出處 http heikediguo2005.blog.163.com blog static 2211971200910254235533 依據訊號量與程序的關係,我們可把程序中使訊號量分成私用訊號量和公用訊號量。私有訊號量是指只與制約程序和被制約程序有關的訊號量 公用訊號量是指與一組併發程序...

經典程序同步問題

wait表示為訊號量減一,當訊號量不夠減時 訊號量 0 時 說明當前資源不足,發出資源請求的程序阻塞直到資源可達。signal 表示為訊號量加一,表示釋放了當前訊號量所指代的資源。兩者都是原子操作,不可打斷。生產者不停的向訊息佇列中生產訊息,消費者則不停的從訊息佇列中獲取訊息。當訊息佇列滿時,生產者...