2.12信号量机制

一,为什么要引入信号量机制

1,为了解决在双标志先检查法,进入区检查和上锁操作无法一气呵成,从而导致两个进程有可能进入临界区的问题

2,上一小节所有方案都无法实现让权等待

3,1965年,荷兰学者Dijkstra提出了一种很好非方法实现进程互斥,同步的方法——信号量机制

二,信号量机制:

1,什么是信号量机制?

用户可以通过系统提供的一对源语来对信号量进行操作,从而很方便的实现进程互斥,进程同步

2,什么是信号量?

信号量其实就是一个变量(可以是整数,也可以是更复杂的记录型变量),可以用一个信号量来表示系统中的某种资源的数量,比如:系统中有一台打印机就可以设置设置初值为1的信号量

3,什么是源语?

原语是一种特殊的程序段,它的执行只能一气呵成,不可以被中断。原语是由关/开中断实现的。上一小节中软件解决方案的主要问题是由“进入区各种操作无法一气呵成导致的”,因此如果能把进入区,退出区的操作都用原语来实现,这些操作能一气呵成就可以避免问题

一对原语:wait(S)原语和signal(S)原语,可以把原语理解为我们写的函数,函数名分别为wait和signal,括号里面的S就是函数调用时传入的参数。

wait,signal原语简称P,V操作。因此,做题的时候把wait(S)和signal(S)操作写成P(s)和V(s)

三,整形信号量

1,用一个整形变量作为信号量,数值表示某种资源数

2,整形信号量与普通信号量的区别:对信号量只能执行初始化,片P,V三种操作

3,整形信号量存在的问题:不满足让权等待原则

二,记录型信号量

1,S.value表示某种资源的数目,S.L指向等待该资源的队列

2,P操作中,一定是先S.value--,之后可能执行block原语

3,V操作中,一定是先S.value++,之后可能执行weakup原语

4,注意:要能够自己判断什么条件下需要执行block原语或weakup原语

                P操作中如果S.value--之后,S.value<0,表示没有资源了,执行block进行自我堵塞,防止忙等

                V操作中如果S.value++之后,S.value<=0,表示堵塞队列中有进程在等待该资源,执行weakup原语唤醒队头的进程

5,可以用记录型信号量实现系统资源 的申请和释放

6,可以用记录型信号量实现进程的互斥,同步

猜你喜欢

转载自blog.csdn.net/weixin_44841312/article/details/105267772