Concurrency 第二次尝试?

Concurrency 第二次尝试?,concurrency,deadlock,critical-section,Concurrency,Deadlock,Critical Section,以下互斥问题的算法不满足互斥性。它能满足僵局吗,饥饿?在没有争用的情况下,它是否也能正常运行 int p=1; int q=1; process P process Q while(true){ while(true){ a1 : nonCriticallSection1; a2 : nonCriticallSection1;

以下互斥问题的算法不满足互斥性。它能满足僵局吗,饥饿?在没有争用的情况下,它是否也能正常运行

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;

对于死锁、饥饿和争用,您的算法应该是正常的。
但是,这种解决方案不可扩展,只适用于2个可能不是您所需要的流程。
你可以看看,找到一些有用的算法

编辑:我不能饿死,因为您设置了一个每个进程的标志,该标志表示进程何时要进入关键部分。所以,如果进程P拥有关键部分,但进程Q想要进入,那么当进程P结束关键部分时,它就会这样做,因为即使调度程序将选择重新执行P,P本身也会检查Q==0,如果是,它将等待。

当然,你的例子是一个研究案例。它在实际应用程序中不起作用,因为它使用轮询和可能的无限循环。我强烈建议不要尝试使用它。

如果这是家庭作业,请添加
家庭作业
标签。另外,请澄清您的问题,我不知道如何“满足僵局”。谢谢andreapier。。。你能解释一下饥饿是如何适用于这个算法的吗。我不明白。以及算法不能死锁。不是吗?