有关信号量和PV操作的易(粗)懂(浅)理解

大概只有操作系统老师布置的作业(要交)能让我认真学习吧……

  • 信号量Semaphore

1.有关信号量的一些说明:
信号量S是一个整数,S大于等于零时代表可供并发进程使用的资源实体数,但S小于零时则表示正在等待使用共享资源的进程数。
在多进程环境下,进程在进入一个临界代码段之前,进程必须获取一个信号量;一旦临界代码段完成了,释放一个信号量。其他想进入临界代码段的进程必须等待直到那个进程释放信号量。
用信号量实现进程互斥的算法如下:

 semaphore S=1;
 Parbegin
    Process1:Begin 
           Repeate
                 while S<=0  do  no-ops;
                 S=S-1;
                 Critical section;//两个进程的临界区是互斥的
                 S=S+1;
            Until false;
            End
   Process2:Begin
          Repeate
                 while S<=0  do  no-ops;
                 S=S-1;
                 Critical section;
                 S=S+1;
            Until false;
            End
  Parend.

2.Windows下信号量包含的几个操作原语:
CreateSemaphore() 创建一个信号量

OpenSemaphore() 打开一个信号量

ReleaseSemaphore() 释放信号量

WaitForSingleObject() 等待信号量
具体操作看大神的文章https://blog.csdn.net/blues1021/article/details/44548115

  • PV操作

1.PV操作的一些概念:

由来:PV操作是由荷兰人狄克斯特拉用荷兰文定义的,因为在荷兰文中,通过叫passeren,释放叫vrijgeven,PV操作因此得名。

作用:实现进程同步与互斥。P操作表示申请一个资源,V操作表示释放一个资源。

定义:
P操作:S=S-1,若S>=0,则执行P操作的进程继续执行;若S<0,则置该进程为阻塞状态,并将其插入阻塞队列。

Wait(S):    while S<=0  do  no-ops;
                 S=S-1;

V操作:S=S+1,若S>0,则执行V操作的进程继续执行,此时不唤醒其他进程;若S<0,则从阻塞状态唤醒一个进程,并将其插入就绪队列。

Signal(S): S=S+1;

有关PV操作的一些问题看大神的解答https://blog.csdn.net/qq_26434675/article/details/51043342
还有一个形象的解释https://blog.csdn.net/u010843114/article/details/44924231

用PV操作实现进程的互斥算法——在临界区的前后加上Wait(P操作)和Signal(V操作)函数即可:

Repeate
       Wait(S);
       Critical Section;
       Signal(S);
Until false;

2.PV操作的特点(一组PV操作对应于一个进程 ):
原子性,P和V操作不可分!
连续性,P和V操作是不间断的。
P自己,V对方:P的是自己的信号量减1,V的是对方的信号量加1.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值