好吧,最近我在研究操作系统概念时学习了严格的交替。为了减少竞争条件的可能性并处理两个过程,我们会这样:
流程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();}
我的方法还可以吗?你们有什么建议?那里有什么更好的吗?
感谢
答案 0 :(得分:0)
根据你拥有的东西,它无论如何都不一定严格交替,例如,它可能会转入= 0并且转弯= 1或转弯= 2代码可以跟随。我的建议是使用操作系统级事件,每个代码路径一个,每个进程触发后面的事件。
答案 1 :(得分:0)
在对提出的概念进行了所有合理的批评之后,还没有人愿意纠正发布的方法中的错误。
每个过程中的常规模式都很简单:
因此,正如SoronelHaetir指出的那样,在3个流程的情况下发布的while (turn …)
条件是错误的。对于进程0和1,它们必须与2进程的情况相同;通常对于流程i
,它是while (turn != i) ; // wait
。