进程互斥的软件实现方式

进程管理

进程同步,进程互斥问题

概念

异步性:各并发执行的进程以各自独立的,不可预知的速度向前推进。

同步性:进程同步指直接制约关系,有确定的次序。

进程互斥:一个进程访问某临界资源时,另一个想要访问该临界资源的进程必须等待,只有当访问临界资源的进程结束时,释放资源后,另一个进程才能去访问临界资源。

互斥访问遵循的四个原则
  1. 空闲让进:临界区空闲,允许一个请求进入临界区的进程了立即进入临界区
  2. 忙则等待:当已有进程进入临界区,其他试图进入临界区的进程必须等待
  3. 有限等待:对请求访问的进程,应保证能在有限的时间内进入临界区(不会饥饿)
  4. 让权等待:当进程不能进入临界区时,应该立即释放处理机,防止进程忙等,

进程互斥的软件实现方法

单标志检查法

设置一个变量,表示谦让。不上锁。不遵循空闲让进的原则。

在这里插入图片描述

流程设置标志变量,标志变量的值就是对应的进程号(不一定是进程号),如果标志变量不对,则死等,进入临界区后,把标志变量更改为另一个进程号。

缺点:只能轮流访问,若允许进入临界区的进程时p0,而p0一直不访问临界区,那么虽然会导致临界区空闲,但是p1也不能访问。

双标志先检查法

先检查,后上锁

  1. 检查有没有人使用资源

  2. 表示意愿,上锁

  3. 使用临界资源

  4. 使用完解锁
    在这里插入图片描述

    缺点:并发运行时,1,5,6,7,2,3,情况要考虑。

    1. 初始时flag[0],flag[1]都为false;

    2. 假设p0先上处理机,则走step1,此时flag[1]为false,跳过while循环,但此时产生进程调度,p1进程走step5,此时flag[0]为false,就会导致跳过5的while循环,然后走step6,把flag[1]赋值为true,然后step7。然后进入临界区

    3. 这时候又发生进程调度,回到p0进程,p0进程走step2,让flag[0]为true,然后进入临界区。

    4. 此时就违反了忙则等待。

      原因在于检查和上锁不能一气呵成。

双标志后检查法

先上锁,后检查

  1. 表示意愿,上锁,

  2. 检查,有没有人使用

  3. 无人使用,俺就使用临界资源

  4. 使用完解锁
    在这里插入图片描述

    问题:1526

    1. 初始Flag[0] flag[1]都为false;
    2. 假设p0进程先上处理机,让flag[0]=true,这时候发生进程调度,执行step5
    3. p1进程让flag[1]=true,然后又切换到P0进程
    4. 此时p0会陷入while循环,然后又发生进程调度,p1进程也会陷入while循环。

    缺点:解决了忙则等待的问题,但违背了空闲让进和有限等待的原则,会无限等待,导致饥饿状态

Peterson算法。
bool flag[2];
int turn = 0;    
//p0进程
flag[0] = true;       ①
turn = 1;while(flag[1]&&turn==1); ③
critical section;    ④
flag[0] = false;    ⑤
remainder section;

//p1进程
flag[1] = true;  ⑥
turn = 0;while(flag[0]&&turn==0);  ⑧
critical section;  ⑨
flag[1] = false;  ⑩
remainder section;

分析16278

  1. 开始flag初始值都为false,turn=0;
  2. 执行step1,flag[0]=true,然后进程调度,step6执行 flag[1]=true;
  3. step2此时turn=1,step7执行然后turn=0;所以最后turn=0并且flag[0]=true,然后执行step8,p1陷入while循环。
  4. 所以最后时p0进程进入临界区。

分析123678

  1. 开始flag初始值都为false,turn=0;
  2. p0进程将flag[0]=true,之后turn=1,然后因为flag[1]为false跳出循环,此时发生进程调度
  3. p1进程将flag[1]=true,之后turn=0;此时flag[0]为false,并且turn=0,满足循环条件,死等。
    参考:王道考研视频
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值