操作系统-信号量和PV操作
信号量是一个什么东西?
其实就是一个变量,代表系统中某种资源的数量,比如我有两台电脑,我就把打印机的数量设置为2
什么是原语?
就是不可以中断,必须一气呵成的,感觉有点像数据库里面的事务这个概念
PV原语,其实是来源于荷兰语,因为他是被一个荷兰人Dijkstra发明的
下面的两个,一个是wait,一个是signal其实对应的 就是P和V
wait(s){
s.value--;
if(s.value <0){//小于0,说明已经没有资源了,要等着
block(s.l);
}
}
signal(s){
s.value++
if(s.value<=0){//小于0说明资源是不够的,还有进程在等待唤醒
wakeup(s.l)
}
}
信号量机制实现进程的互斥
1.先把互斥信号量(mutex)设置为1
semaphore mutex =1
2.在临界区之前执行P(mutex) 资源的申请
3.在临界区之后执行V(mutex) 资源的释放
注意:pv操作必须成对出现
信号量实现同步关系关系
口诀:前V 后P
要在之前执行的操作之后执行V
要在后面执行的操作之后执行P
信号量实现前驱关系