Peterson‘s算法(并发双线程互斥锁

pterson's算法是两个进程同时访问一个资源,使用纯软件实现了互斥锁.比操作系统的互斥锁性能更好一些.

缺点:只能实现两个进程的互斥访问.

解决了临界区问题的三个标准: 互斥访问,进入(不发生死锁),有限等待(即不饿死)

peterson算法可以确保:    不会让两个进程同时进入临界区.

                                         不会让进程进入死循环(即两个进程都不能进入临界区)

                                        不会让进程都饿死在临界区外,即保证每个进程都可以进入临界区

本质是谦让模式:两个进程如果有一个想进入临界区,先观察一下另一个是否也想进入临界区,如果是,则让另一个进程先进入.

#include<stdio.h>
boolean flag[2];
int turn;
void P0(){
		flag[0]=true;
        turn=1;
    	while(flag[1]&&turn==1){}  //flag[1]为false,不满足循环条件,P0就进入临界区.若flag[1]为true,满足循环条件,P0循环等待,P1退出临界区,P0进入
        print("0号进程在访问临界区")
    	临界区;
    	flag[0]=false; //临界区访问完成, 0号进程释放临界区
}
void P1(){}
		flag[1]=true;
        turn=0;
    	while(flag[0]&&turn==0){}  //flag[0]为false,不满足循环条件,P1就进入临界区,若flag[0]为true,满足循环条件,P1循环等待,P0退出临界区,P1进入
        print("1号进程在访问临界区")
    	临界区;
    	flag[1]=false;   //临界区访问完成, 1号进程释放临界区.
}
int main(){
flag[0]=false;flag[1]=false;
P1();
P0();
P0();
P1();
}

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

村长在路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值