有关信号量和PV操作的易(粗)懂(浅)理解
大概只有操作系统老师布置的作业(要交)能让我认真学习吧……
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
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.
上一篇: 操作系统互斥的七种算法
下一篇: 农夫-猎人问题