互斥进程实现_1

Author : 张一极

20:55-20201025

1.单标志

中心 : 进程进入临界区的权限,只能由另一个进程赋予

初始化阶段,设置一个变量为允许进入临界区的进程flag:

两个进程:

P1 :

P2 :

解读:

一般情况一:

1.初始化标志位数据为0(使得p1可优先进入系统临界区)

2.执行p1,跳过循环语句,执行代码,执行完毕,退出,调度p2进入.

特殊情况一:

P2先调度进入系统,while函数是过不去的,此时只能等待P2退出(时间片用完)再调度P1,进行上述运行,接一般情况一

特殊情况二:

P1正常进入(包含P2调度消耗完时间片后调度P1),由于run期间,存在等待io等情况,如果未能将flag修改,便已经时间片用完,调度给P2,此时依然无法执行P2,只能等待时间片消耗,再返回P1.

问题:

只要存在P1不访问临界区的情况,会出现flag保持恒为0,此时无论什么时候调度到P2,都无法让它访问临界区,纵使现在进程是空闲的,浪费了系统资源.


2.双标志

新增数组bool flag[2];

P1:

P2:

缺陷:

如果先执行while(flag[0]);紧接着发生调度,执行了while(flag[1]);那么会出现的情况就是,同时通过了while的循环,flag无意义,此时会出现共同访问的情况,违背临界区访问唯一性原则,原因是循环检查和锁定并非同时执行,前后可能出现进程切换.


3.双标志后检查

P1:

P2:

缺陷

同样,如果出现第一行语句同时执行,会出现,两个flag失效(all true),两个进程都无法访问临界资源.


End

21:12-20201025

晚安