我正在通过在线课程学习操作系统,并且遇到了一些用于流程同步的软件解决方案。老师正在解释所有软件解决方案,从使用单个turn
变量到Peterson的解决方案开始。
我对最基本的方法有疑问。为了清楚起见,请参考课程视频中随附的屏幕截图。该方法是在有两个进程的情况下使用单个turn
变量,并根据要访问关键部分的进程依次存储1或2。这种方法可以保证互斥,但不能满足进度要求,因为如果turn
最初为1,并且P2首先要进入临界区,那么即使P1不在临界区中,它也会在while循环中被简单地阻塞。部分。我的想法是将turn
设为-1,然后继续。没有其他进程会被阻止。
我已经检查了多个在线课程,但是没有人在讨论这一简单的更改,而是继续使用诸如Petersons算法或信号灯之类的高级解决方案。我在想对吗?我的方法正确吗?
答案 0 :(得分:1)
您在此处描述的内容称为“严格交替”。您提出的修改算法的建议是,使turn
最初为-1
无效。在您的示例中,如果turn
不等于2,则进程1将不会阻塞。如果turn
不等于1,则进程2将不会阻塞。最初,如果turn
为-1
,则进程1和进程2均不会阻塞。结果,两者可以同时执行其关键部分。您不再具有互斥属性。