3个过程的严格交替

时间:2017-12-05 16:02:53

标签: c++ c linux operating-system theory

好吧,最近我在研究操作系统概念时学习了严格的交替。为了减少竞争条件的可能性并处理两个过程,我们会这样:

流程0:

While (TRUE) {

    while (turn != 0); // wait
    critical_section();
    turn = 1;
    noncritical_section();}

}

流程1:

While (TRUE) {

    while (turn != 1); // wait
    critical_section();
    turn = 0;
    noncritical_section();

}

但我想知道如何处理3个进程以进一步减少比赛条件?

我的方法是: 流程0:

while (turn != 0 && turn != 2); // wait
critical_section();
turn = 1;
noncritical_section();}

流程1:

while (turn != 1 && turn != 0); // wait
critical_section();
turn = 2;
noncritical_section();}

流程3:

while (turn != 1 && turn != 2); // wait
critical_section();
turn = 0;
noncritical_section();}

我的方法还可以吗?你们有什么建议?那里有什么更好的吗?

感谢

2 个答案:

答案 0 :(得分:0)

根据你拥有的东西,它无论如何都不一定严格交替,例如,它可能会转入= 0并且转弯= 1或转弯= 2代码可以跟随。我的建议是使用操作系统级事件,每个代码路径一个,每个进程触发后面的事件。

答案 1 :(得分:0)

在对提出的概念进行了所有合理的批评之后,还没有人愿意纠正发布的方法中的错误。

每个过程中的常规模式都很简单:

  • 轮到我 时,请等待
  • 执行关键部分
  • 设置转向下一步进程

因此,正如SoronelHaetir指出的那样,在3个流程的情况下发布的while (turn …)条件是错误的。对于进程0和1,它们必须与2进程的情况相同;通常对于流程i,它是while (turn != i) ; // wait