通过一道题目来理解互斥和同步

前言

在进程的学习中,互斥和同步是最重点的内容,但由于其过于抽象,繁杂的信号量的使用令同学们望而生畏,本博客的目的是想通过对一道题目的解析来探究互斥与同步最本质的特性。由于博主水平有限,还恳请大家批评指正。


题目:判断下列问题的算法是否正确?若不正确,如何改正?

解答与剖析

第一小问:同步问题


解答

上图中的算法是有误的。假如进程A先运行,并且待存入缓冲区的信息数量很大,那么每一次存入新的信息时,原来已存入的信息就会丢失(每次只能存入一条消息),所以得想办法让进程A存入一条消息时,进程B就会接着运行并且取走进程A存入的那条消息。
那么我们要做的事情就明确了,题干中提到进程A“”,进程B“”,说明它们之间有合作关系,那么这就是同步问题。

待解决的问题如下:
① 必须让进程A先运行,这样才能保证进程B运行时有信息可以取;
② 进程A每次只能存入一条消息。

正确答案:

那为什么正确答案是这样子的呢?请看剖析。
剖析

首先,设置empty=1,full=0,为什么呢,可以这样理解:empty=1说明是缓冲区是空的,full=0说明缓冲区不是满的。(在本例中假设非空=满)

当进程A执行时,empty变为0,full变为1,此时进程B就可以执行了(进程A未执行时full=0,此时进程中的代码P(full)无法执行,故无法访问缓冲区)。

我们可以看到,在同步中,其实也蕴含了互斥,而且同一个信号量一般都是放在不同的进程中的,这样子才能通过对某共享资源的共同存取协同完成某项任务

所以说实现同步时,要注意至少有一个信号量是放在不同进程中的,因为至少要两个人要成实现所谓的协同,并且,既然要合作,那么他们肯定都掌握着某种共同的东西(这里指信号量),通过对这种东西进行操作而实现协同完成某项工作。

第二小问:互斥问题

解答

上图中的算法是有误的。题干提到,A、B是并发进程,他们共享一个临界资源,说明A、B之间是竞争关系,并且它们之间无合作关系,所以可判断这是互斥问题。

正确答案:

剖析

首先,设置信息量mutex(可以随意命名),默认值为1最重要的一点,无特殊情况下,互斥的信息量都是设置为1)。

此时,因为A与B是并发执行的,由于不确定性,A、B的执行顺序是不确定的。无论是哪个进程先执行,在这里假设A先执行了,当A执行了P(mutex)之后,mutex变为0,这样,B进程将无法访问临界资源,当A进程的代码执行后,再执行V(mutex),mutex变为1,这个时候,所有进程就可以再次争夺访问临界资源的资格(A进程也可继续争抢,因为操作系统的不确定性,各进程的执行顺序是不确定的)。


完。

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

猫咪钓鱼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值