退出代码;
非临界区;
} }
算法1的思想
设置一个公用整型变量turn,用来指示允许进入临界区的进程标识。若turn为0,则允许进程p0进入临界区;否则循环检查该变量,直到turn变为本进程标识;在退出区,修改允许进入进程的标识为1。进程p1的算法与此类似。两个进程的程序结构如下:
算法1的描述
int turn=0;
p0: while (true)
{
while (turn!=0);
进程p0的临界区代码cs0 ;
turn=1 ;
进程p0的其他代码;
}
算法1的描述(续)
p1: while (true)
{
while (turn!=1);
进程p1的临界区代码cs1;
turn=0 ;
进程p1的其他代码;
}
算法1存在的问题
此算法可以保证互斥访问临界资源,但两个进程必须以交替次序进入临界区。
此算法不能保证实现空闲让进准则。
算法2的思想
设置标志数组flag[ ]表示进程是否在临界区中执行,初值均为假。在每个进程访问临界资源之前,先检查另一个进程是否在临界区中,若不在则修改本进程的临界区标志为真并进入临界区,在退出临界区时修改本进程临界区标志为假。
算法2的描述
enum boolean {false,true};
boolean flag[2]={false,false};
p0: while (true)
{
while flag[1];
flag[0]=true;
进程p0的临界区代码cs0 ;
flag[0]=false ;
进程p0的其他代码;
}
算法2的描述(续)
p1: while (true)
{
while flag[0];
flag[1]=true;