pv操作判断信号量
pv操作那里,为啥我觉得S<=0和s<0好难理解。。。。刚去找视频看了,
意思是减完之后,判断如果小于0,就说明本来就是<=0说明临界资源本来就是不可用的。那么将本进程阻塞。
V操作用于进程出临界区的时候去释放资源,加完1相当于我用完了资源,加1之后如果值<=0说明我加一之前value<0(是负的 ,表示有进程想用该资源而不能用被阻塞等待,因此需要唤醒一个进程 本帖最后由 侃遍天下无二人 于 2023-3-2 11:40 编辑
PPT写得太复杂了,先不要管阻塞队列的事。
首先, 先假定s==0之后所有的P操作都会被阻塞/卡住,而只有等V操作完成后再随机唤醒/恢复一个P操作;
现在,再告诉你,所谓阻塞队列无非就是描述有多少个P操作被卡住了;
再进一步考虑,如果允许P操作先减小s的值再卡住,这个时候s==-1就表示有一个进程的P操作被卡住,阻塞队列长度为1;
现在再假定 s<<0, 这个时候如果有进程发起了V操作,会释放一个单位的资源,使s+=1,这一【瞬间】可用资源数为1,此时会有一个原本被阻塞的P操作得以继续执行,但此P操作执行后,可用的资源数从1变为0(这个过程可以认为是瞬间完成的),等这个P操作结束后又会进行V操作继续释放资源。在s恢复为正数之前,除去执行完几个V操作的瞬间,系统的可用资源数始终为0。
所以并不是像ppt上写的那样只有s>=0的时候才释放资源,而是只要执行了V操作就会释放资源,只是如果s仍然为负,释放的资源会瞬间被申请走。
截一张之前上课的图。看代码就明白了。没必要纠结他是不是<0 云在天 发表于 2023-3-2 14:32
截一张之前上课的图。看代码就明白了。没必要纠结他是不是<0
另外,图上说没有先后顺序纯纯瞎扯
如果有两个semaphore 顺序如果出错,就会出现deadlock。 侃遍天下无二人 发表于 2023-3-2 11:23
PPT写得太复杂了,先不要管阻塞队列的事。
首先, 先假定s==0之后所有的P操作都会被阻塞/卡住,而只有等V ...
谢谢大佬说的太细了感恩{:1_893:} 云在天 发表于 2023-3-2 14:34
另外,图上说没有先后顺序纯纯瞎扯
如果有两个semaphore 顺序如果出错,就会出现deadlock。
好的 明白了 谢谢大佬!!{:1_893:} 进程原语 PV 操作是一个用于实现进程间同步的基本工具,常见于操作系统中的进程间通信(IPC)中。PV 操作包括两个原语:P(proberen)和 V(verhogen),它们分别表示对资源的请求和释放。一般情况下,PV 操作需要成对出现,即每个 P 操作都必须对应一个 V 操作。
对于 PV 操作的先后顺序,一般来说,需要满足以下两个条件:
每个进程在执行 PV 操作时,必须按照一定的先后顺序执行 P 和 V 操作。例如,在执行一个关键区域的代码之前,必须先执行 P 操作来获得资源,然后在执行完关键区域的代码之后,再执行 V 操作来释放资源。
在多个进程之间,必须保证 P 和 V 操作的执行顺序不会导致死锁或资源竞争等问题。通常可以使用一些同步算法来解决这些问题,例如信号量、互斥量等。
需要注意的是,PV 操作的具体先后顺序可能会因为系统环境、算法实现等因素而有所不同,因此在使用 PV 操作时,需要参考具体的实现文档或算法说明,以确保正确使用。 侃遍天下无二人 发表于 2023-3-2 11:23
PPT写得太复杂了,先不要管阻塞队列的事。
首先, 先假定s==0之后所有的P操作都会被阻塞/卡住,而只有等V ...
引用chatgpt的答案哪里有错 可以友情提醒吧本意也是想有一些概念性的说明 因为提到顺序我就去问了下 把答案贴进来作为公共知识方便大家一起学习交流的。 wuqingvika 发表于 2023-3-6 16:01
引用chatgpt的答案哪里有错 可以友情提醒吧本意也是想有一些概念性的说明 因为提到顺序我就去问了下 把 ...
版规写着禁止照搬的,你要想参考下做总结没问题,但要用你自己的理解来写,我也看了chatgpt,但你看我答案里还有它的风格吗
页:
[1]