信号量(一) 基础知识
????? 信號量是1965荷蘭Dijkstra為了解決并發(fā)進(jìn)程問題而提出的一個(gè)重要操作系統(tǒng)的思想
?????
????? 其基本思想:
????? 兩個(gè)或多個(gè)進(jìn)程能夠通過簡單的信號進(jìn)行合作,一個(gè)進(jìn)程能夠被迫在某個(gè)位置停止,直到它接收到一個(gè)特定的信號。不論什么復(fù)雜的合作需求都能夠通過適當(dāng)?shù)男盘柦Y(jié)構(gòu)得到滿足。為了發(fā)信號,須要使用一個(gè)稱為信號量的特殊變量。為通過信號量s發(fā)送信號,進(jìn)程可運(yùn)行原語semSignal(s),即V操作;為了通過信號量s接收信號,進(jìn)程可運(yùn)行原語semWait(s),即P操作;假設(shè)對應(yīng)的信號還沒有發(fā)送,則進(jìn)程將被掛起,直至發(fā)送位置
?
???? 信號量可被看做死一個(gè)具有整數(shù)型的變量,有三個(gè)操作:
1. 一個(gè)信號量能夠初始化成非負(fù)數(shù),一般資源數(shù)就是信號量的初始值
2. semWait操作,即P操作,使得信號量減1,假設(shè)值變成負(fù)數(shù)(s?<0) 則運(yùn)行semWait的進(jìn)程被堵塞,否則進(jìn)程繼續(xù)運(yùn)行
3. semSignal操作,即V操作,使得信號量加1,假設(shè)值小于或等于零,則被semWait操作堵塞的進(jìn)程被解除堵塞
?
?
P,V操作的偽代碼?:
#include<queue> using namespace std; struct semaphore{ int count; queueType queque; } void semWait(semaphore s){//P操作 s.count--; if(s.count<0){ place this process in s.queue; block this process; } } void semSignal(semaphore s){//V操作 s.count++; if(s.count<=0){ remove a process P from s.queque; place process P on ready list; } }
?
?
總結(jié)
以上是生活随笔為你收集整理的信号量(一) 基础知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: find文件,tar打包和打包压缩
- 下一篇: tomcat变量环境脚本setclass