408第三季part1 - 操作系统 - 互斥与同步

byd这章大题比选择多

闲聊

异步和同步的概念一开始说过了

看一看

1 就是如果临界区是空着,没人用,就是让进

2 忙正在用,不能同时用,等

3 你别一直等,会自卑的

4 你进不去就释放CPU,别死皮赖脸

然后中间跳了很多很多东西,直到

信号量

然后整型信号量也跳了

直接看

记录型信号量

然后代码看一下

用链表实现的队列,重命名为semaphore,记录型信号量就是除了整数,还有一个队列

我们来好好看看这些代码吧,如果下面文字没看懂没事,后面有炒鸡详细的理解过程

这里wait操作

首先让S里的值value先减少,表示分配该资源的数量减1

如果发现里面的值小于0了,说明这个资源已经被分配完了,就把这个进程添加到队列,并让出CPU(运行变堵塞)

wakeup就是堵塞变成就绪

然后举个例子理解上面的原理

那个波浪线是临界资源,想要让它互斥,你就得在上下设置一个PV

然后我们把初始值S设置为1

这里P2先执行,执行P的时候 S的值是0,并不是<0,所以进入临界区大干,快干,多干,苦干,实干,加油干

这时候P3错过了风口,但也想执行,进入了P3的P(S)发现减1后是<0的了,此时你就等吧,你就加入0人在意的队列吧,你CPU也别占着了,赶紧自己堵塞自闭去吧

最后刚刚毕业于食品工程的P1也想执行,进入了P1的P(S)后发现

这时!!P2终于退休干完了!加完后发现S是-1,确实是<=0的,就会先移除队列的P3放入process P,然后唤醒它,终于,我们的P3再也不用等了,也拿回了自己的CPU进程

但值得注意的是,唤醒是堵塞变就绪,并不是立即执行的

最后的最后,等P1做完到V的时候,信号量已经变成了1,这时V操作的if条件不再执行,再也没有任何进程堵在队列里了,世界变的美好了

用PV操作实现同步

我想先执行P1再执行P2 bro

先说结论先发生的后面加V,后发生的前面加P,信号量该为0

欧克,我们可以试试会发生什么

如果你愣头青,就是想执行P1,行,你执行的时候会发现你会被堵塞,因为信号量是-1,加入堵塞队列

P2就没人拦着,运行完了就可以把P1拿出来删除唤醒了

PV操作实现前驱关系

什么拓扑图,这里每个地方都定义了一个信号量

然后死套公式,先发生的后面加V,后发生的前面加P

书上的小知识

这里可以看成P是加锁和V是释放锁

然后是同步,简单看看

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值