1.单标志法
定义一个turn ,根据turn的值判断那个进程进入临界区
//进程1
while(turn!=0){
//进程卡住,让权
}
// *
处理临界区
//
turn = 1;
//进程2
while(turn!=1){
//进程卡住,让权
}
// *
处理临界区
//
turn = 0;
这样一定是线程交替进行 ,但是若长期无另一个线程改变turn 就会一直停顿
2.双标志法–先进行检查
先判断对方线程是否要操作(谦让)
所以 flag【0】与flag【1】
//进程1
while(flag[1]){
//对方要使用,当前线程卡住
}
//对方不使用
flag[0]=true;
//**
临界操作
//**
flag[0]=false;
//进程2
while(flag[0]){
//对方要使用,当前线程卡住
}
//对方不使用
flag[1]=true;
//**
临界操作
//**
flag[1]=false;
但是问题在于 当这两个线程同时进入 while 都没有发现对方要是用线程,因此 会同时进入临界区
3.双标志–先修改
先表明自己要使用临界区,在判断对方是否使用
//进程1 申请使用
flag[0]=true;
while(flag[1]){
//对方要使用,当前线程卡住
}
//**
临界操作
//**
flag[0]=false;
//进程2 申请使用
flag[1]=true;
while(flag[0]){
//对方要使用,当前线程卡住
}
//**
临界操作