操作系统-- 互斥实现

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]){
//对方要使用,当前线程卡住
}
//**
临界操作
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值