4.进程互斥的软件实现方法:
(1)单标志法:
int turn = 0; //turn表示当前允许进入临界区的进程号。
P0进程: P1进程:
while(turn!=0);① while(turn!=1);⑤ //进入区
critical section;② critical section;⑥ //临界区
turn = 1;③ turn = 0;⑦ //退出区
remainder section;④ remainder section;⑧ //剩余区
分析:turn的初值为0,即刚开始只允许0号进程进入临界区。若P1先上处理机运行,则会一直卡在⑤。直到P1的时间片用完,发生调度,切换P0上处理机运行。代码①不会卡住P0,P0可以正常访问临界区,在P0访问临界区期间切换回P1,P1依然会卡在⑤。只有当P0退出区将turn改为1后,P1才能进入临界区。
对于临界区的访问,一定是按照P0->P1->P0->P1->...轮流访问的。这种访问带来的问题是,如果P0一直不访问临界区,就算此时的临界区空闲,也不允许P1访问。
算法思想:两个进程在访问完临界区后会把使用临界区的权限转交给另一个进程。每个进入临界区的权限只能被另一个进程赋予。
在进入区只做检查,不"上