目录
1、PV
1.1、进程的同步和互斥
1.1.1、互斥
互斥即为千军万马过独木桥,只有一个进程能获取到资源,为间接制约关系
临界资源:各个进程间需要互斥方式对其进行共享的资源
临界区:进程中访问临界资源的那段代码称为临界区
1.1.2、同步
同步即为互相等待,可以同时获取资源,但有的进程快,有的进程慢,需要等待慢的进程,为直接制约关系
1.2、PV的操作
PV即为加锁与解锁,P为加锁,V为解锁,此为原子化操作,即加锁,解锁操作是同步发生,类似数据库事务操作,为何如此设定,在下文中会有详细说明
S为信号量,是全局变量。
- 信号量可以表示资源数量
- 信号量为负数时还可以表示排队进程数
PS即申请资源操作,或是称为锁定资源,分为两个步骤
- 申请/锁定资源,S-1
- 检查资源是否足够,看S<0
这两个步骤必须要同时进行,即原子化操作,否则会导致在检查资源数量时发生错误。
需要注意的是,因为S本身是先申请,后检查,所以只需要判断S不小于0即可保证资源足够。
VS即释放资源操作,或是称为解锁资源,分为两个步骤
- 申请/锁定资源,S+1
- 检查进程是否排队,看S≤0
若有排队,则通知进程从阻塞进入就绪。
2、信号量与PV操作
2.1、互斥模型
互斥,即多个线程抢夺一个可用资源。
在互斥模型中,PV操作是成对出现的,其中的信号量也就叫互斥信号量。
2.2、同步模型
同步模型涉及到多个线程之间的顺序协调。
典型的同步模型为生产者消费者模型,生产者生产产品PS1,送到缓冲区VS2,消费者从缓冲区中取到PS2,消费产品PS1。
产品在送到缓冲区之前,要检测缓冲区是否已满,如果满了,生产者将会阻塞。
产品在从缓冲区取之前,要检测缓冲区是否已空,如果空了,消费者将会阻塞。
S1的初值为1,S2的初值为0,它们都是同步信号量。
2.3、互斥与同步模型相结合
在某些同步模型中,缓冲区本身就是互斥的,那么就要将两者结合使用。
如果空间资源的初值为1,生产者消费者模型,生产者生产产品PS1,此时加锁PS,然后解锁VS,送到缓冲区VS2,消费者从缓冲区中取到PS2,此时加锁PS,然后解锁VS,消费产品PS1。
S信号量控制的是临界资源,即缓冲区的访问权。
S的初值为1,允许使用状态,互斥信号量。
S1的初值为1,S2的初值为0,它们都是同步信号量。
如果空间资源的初值为M,那么S1的初值将变为M
3、前趋图
前趋图是一种顺序图,同级的节点代表着同一顺序,不同级别的节点代表着不同的顺序。
A,B,C是同级节点,D是下级节点,E,F又是同级节点,G是下级节点,这样先后顺序就很明了。
在整个前趋图中,只能从ABC三个节点开始,那么该如何进行控制呢?
在D节点处,使用P操作,对ABC节点进行检查,即PA,PB,PC。检查前趋资源。
在ABC节点处,通知资源,即VA,VB,VC。
对于EF节点来说,一样需要前趋活动PD
对于D节点,一样需要后继活动,VE,VF