进程同步和进程互斥(上)

进程同步和进程互斥

  • 进程同步:
    1.并发性带来了异步性,又是需要通过进程同步解决异步问题。
    2.优点进程之间需要相互配合地完成工作,各进程的工作推进需要遵循一定的先后顺序。
  • 进程互斥:
    对临界资源的访问,需要互斥的进行,即同一时间段内只能允许一个进程访问该资源。
  • 互斥访问的原则:
    1.空闲让进
    2.忙则等待
    3.有限等待(对要求访问临界资源的进程,应保证有限时间内能进入自己的临界区,以免陷入“死等”状态)
    4.让权等待(当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入“忙等”状态)

进程互斥的软件实现方法

单标志法

int turn = 0;// turn 表示当前允许进入临界区的进程号

P0进程:

while (turn!=0);  //进入区
critical section; //临界区
turn=1;           //退出去
remainder section;//剩余区

P1进程:

while (turn!=1);  //进入区
critical section; //临界区
turn=0;           //退出去
remainder section;//剩余区

单标志法只能P0->P1->P0->P1->p0… 交替执行,因此违反了空闲让进原则。

双标志先检查法

bool flag[2];   //表示进入临界区意愿的数组
flag[0]=false;
flag[1]=false;  //刚开始设置为两个进程都不想进入临界区

P0进程:

while (flag[1]);  //如果此时P1想进入临界区,P0就一直循环等待
flag[0]=true;     //标记为P0进程想要进入临界区
critical section; //访问临界区
flag[0]=false;    //访问完临界区,修改标记为P0不想使用临界区 
remainder section;

P1进程:

while (flag[0]);  //如果此时P0想进入临界区,P1就一直循环等待
flag[1]=true;     //标记为P1进程想要进入临界区
critical section; //访问临界区
flag[1]=false;    //访问完临界区,修改标记为P1不想使用临界区 
remainder section;

双标志先检查法违反忙则等待原则

双标志后检查法

bool flag[2];   //表示进入临界区意愿的数组
flag[0]=false;
flag[1]=false;  //刚开始设置为两个进程都不想进入临界区

P0进程:

flag[0]=true;     //标记为P0进程想要进入临界区
while (flag[1]);  //如果此时P1想进入临界区,P0就一直循环等待
critical section; //访问临界区
flag[0]=false;    //访问完临界区,修改标记为P0不想使用临界区 
remainder section;

P1进程:

flag[1]=true;     //标记为P1进程想要进入临界区
while (flag[0]);  //如果此时P0想进入临界区,P1就一直循环等待
critical section; //访问临界区
flag[1]=false;    //访问完临界区,修改标记为P1不想使用临界区 
remainder section;

双标志后检查法违反空闲等待和有限等待原则

Peterson算法

bool flag[2];   //表示进入临界区意愿的数组
flag[0]=false;
flag[1]=false;  //刚开始设置为两个进程都不想进入临界区
int turn=0;     //turn表示优先让哪个进程进入临界区

P0进程:

flag[0]=true;     //标记为P0进程想要进入临界区
turn=1//可以优先让P1进入临界区
while (flag[1]&&turn==1);//P1想进,且最后一次是自己谦让,则自己循环等待
critical section; //访问临界区
flag[0]=false;    //访问完临界区,修改标记为P0不想使用临界区 
remainder section;

P1进程:

flag[1]=true;     //标记为P1进程想要进入临界区
turn=0//可以优先让P0进入临界区
while (flag[0]&&turn==0);//P0想进,且最后一次是自己谦让,则自己循环等待
critical section; //访问临界区
flag[1]=false;    //访问完临界区,修改标记为P1不想使用临界区 
remainder section;

Peterson算法违反让权等待原则

进程互斥的硬件实现方法

  • 中断屏蔽方法:使用:开 / 关中断指令实现
    优点:简单高效
    缺点:只适用于单处理机;只适用于操作系统内核进程

  • TestAndersonSet(TS指令 / TSL指令)
    优点:实现简单;适用于多处理机环境;
    缺点:不满足让权等待

  • Swap指令(XCHG指令)
    优点:实现简单;适用于多处理机环境;
    缺点:不满足让权等待

注:下一篇讲述用信号量机制实现进程的同步和互斥

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值