拉粑粑的哲学--进程同步与互斥--软件实现方式

1.单标志法

  • 算法思想

两个进程在访问完临界区后会把使用临界区的权限转交给另一个进程。
也就是说每个进程进入临界区的权限只能被另一个进程赋予

在这里插入图片描述

1.2.但是这个算法存在一个问题

先用个有味道的例子来说一下
A和B按照规律,每天早晨都比上一次厕所。且B都是等A上完再去上。然后A如果在想上厕所,就等B上完
但是有一天,A早上突然不想上厕所了,但是B还是在等待A上厕所。这个时候厕所就是空闲的
上图的 int turn=0
就是约定每次都是让A先使用厕所
turn =1:代表A测试使用完毕,B可以使用了
入上述例子所说
如果A一开始不想用厕所,那么厕所就是空的。然后就违背了临界资源互斥访问四原则-----“空闲让进”

2.双标志先检查法

算法思想
设置一个布尔型数组 flag[],数组中各个元素用来标记各进程想进入临界区的意愿,比如“flag[0] = ture”意味着O号进程P现在想要进入临界区。每个进程在进入临界区之前先检查当前有没有别的进程想进入临界区,如果没有,则把自身对应的标志flag[i]设为true,之后开始访问临界区。

在这里插入图片描述

2.2.提出问题

还是用一个有味道的例子来说
在宿舍中,有A,B俩个同学。然后又如下场景
A正在看电影,突然想拉粑粑。就对厕所叫一声有人没?然后没人回答,A认为厕所每人了。就到去柜子拿卫生纸
但是此时B也想上厕所,他直接推开厕所门,发现没人,然后B也就回去柜子拿卫生纸
A前脚进入厕所,B后脚也就进入了厕所…
上述例子说明了,这个算法违反了----“忙则等待原则”
主要原因,检查上厕所和实际上厕所不是连贯的,中间还有个拿卫生纸的操作

3.双标志后检查法

  • 算法思想:
    双标志先检查法的改版。前一个算法的问题是先“检查”后“上锁”,但是这两个操作又无法一气呵成,因此导致了两个进程同时进入临界区的问题。因此,人们又想到先“上锁”后“检查”的方法,来避免上述问题。
    在这里插入图片描述

3.2.提出问题

还是用一个有味道的例子来说
在宿舍中,有A,B俩个同学。然后又如下场景
A正在看电影,突然想拉粑粑。就到去柜子拿卫生纸
但是此时B也想上厕所,然后B也去柜子拿卫生纸
这个时候A和B同时到大厕所门前
然后A和B就相互谦让,导致最后谁也没用到厕所
上述例子就说明了,这个算法违背了------“优先等待原则”

3.3.双标志先与双标志后区别


我先检查厕所有人没,没人我再去拿纸,然后再去上厕所

我先拿纸,然后到厕所看看有人没

4.Peterson算法

算法思想:双标志后检查法中,两个进程都争着想进入临界区,但是谁也不让谁,最后谁都无法进入临界区。Gary L. Peterson想到了一种方法,如果双方都争着想进入临界区,那可以让进程尝试“孔融让梨”,主动让对方先使用临界区。

在这里插入图片描述

4.2.提出问题

  • 用生活中的例子来说明

还是用一个有味道的例子来说
在宿舍中,有A,B俩个同学。然后又如下场景
A正在看电影,突然想拉粑粑。就到去柜子拿卫生纸
但是此时B也想上厕所,然后B也去柜子拿卫生纸
这个时候A前脚刚到,B就后脚到
然后A就说B你先用吧,B说不了还是你先吧,A就说好吧那就我先了

在这里插入图片描述

  • 上述例子说明了,这个算法违背了----"让权等待"规则
    让权等待:访问不了资源就立马释放CPU

5.总结
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值