PV原语稍微详细点的表示方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

PV原语稍微详细点的表⽰⽅法
PV原语的边界条件写的太精简,所以我稍微详细点的表⽰。

PV原语
P原语:P是荷兰语Proberen(测试)的⾸字母。

为阻塞原语,负责把当前进程由运⾏状态转换为阻塞状态,直到另⼀个进程唤醒它。

具体操作为:申请⼀个空闲资源(把信号量减1),若成功,则退出;若失败,则该进程被阻塞。

V原语:V是荷兰语Verhogen(增加)的⾸字母。

为唤醒原语,负责把⼀个被阻塞的进程唤醒,他有⼀个参数表,存放着等待被唤醒的进程信息。

具体操作为:释放⼀个被占⽤的资源(把信号量加1),如果发现有被阻塞的进程,则选择⼀个唤醒。

表⽰⽅法
P(S):表⽰将信号量S的值减⼀,即S=S-1;如果S>=0,则该进程继续执⾏,否则该进程置为等待状态,排⼊等待队列(队列Q)。

V(S):表⽰将信号量S的值加⼀,即S=S+1;如果S>0,则该进程继续执⾏,否则释放队列(Q)中第⼀个等待信号量的进程。

我的稍微详细点表⽰⽅法
P(S):表⽰将信号量S的值减⼀,即S1= S; S2=S1-1;如果S2>=0,也就是S1>=1,说明有现成的资源直接可以⽤,不⽤等!,则该进程继续执⾏,否则(也就是S2<0变成负数)该进程置为等待状态,排⼊等待队列(队列Q)。

V(S):表⽰将信号量S的值加⼀,即S1=S; S2=S1+1;如果S2>0,也就是S1>-1也就是S1>=0,也就是说明V操作之前S1不是负数,说明根本不存在等待资源的进程,等待队列是空的!,则该进程继续执⾏,否则(也就是V操作之后释放了⼀个资源,⼜有⾄少⼀个正在等待资源的进程,那就去唤醒这个进程)释放队列(Q)中第⼀个等待信号量的进程。

相关文档
最新文档