2011-12-28 231 views
-1

以下用於互斥問題的算法不滿足互斥屬性。它滿足了僵局,飢餓嗎?而且在沒有爭用的情況下它是否正確運行?第二次嘗試?

int p=1; 
int q=1; 

process P         process Q 
while(true){         while(true){ 
a1 : nonCriticallSection1;     a2 : nonCriticallSection1; 
b1 : while (q !=1){ do nothing}    b2 : while (p !=1){ do nothing} 
c1 : p=0;         c2 : q=0; 
d1 : critical section      d2 : critical section 
e1 : p=1;         e2 : q=1; 
    }           } 
end P;          end Q; 
+1

如果這是家庭作業,請添加'家庭作業'標籤。另外,請澄清你的問題,我不知道如何「滿足僵局」。 – thiton 2011-12-28 12:03:35

回答

0

您的算法應該可以用於死鎖,飢餓和爭用。
但是,這種解決方案不具有可擴展性,並且只適用於2個可能不屬於您需要的流程。
你可以看看wikipedia'e entry for deadlock找到一些有用的算法。

編輯:我不能starvate當你設置每個進程標誌,說當一個進程想要進入關鍵部分。因此,如果進程P擁有關鍵部分,但進程Q想要進入,那麼當P結束臨界區時,它會執行,因爲即使該進程將選擇重新執行P,P本身也會檢查q == 0,如果是,它將等待。
當然你的例子是一個研究案例。它在實際應用中不起作用,因爲它使用輪詢和可能的無限循環。我強烈建議不要嘗試使用它。

+0

謝謝andreapier ...你可以解釋如何飢餓適用於這種算法。我不明白。以及算法不能死鎖。不是嗎? – desh 2011-12-28 12:20:00

+0

謝謝andreapier – desh 2011-12-28 12:40:13

相關問題