2011-12-28 197 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

相关问题