信号量(一) 基础知识
????? 信號量是1965荷蘭Dijkstra為了解決并發進程問題而提出的一個重要操作系統的思想
?????
????? 其基本思想:
????? 兩個或多個進程能夠通過簡單的信號進行合作,一個進程能夠被迫在某個位置停止,直到它接收到一個特定的信號。不論什么復雜的合作需求都能夠通過適當的信號結構得到滿足。為了發信號,須要使用一個稱為信號量的特殊變量。為通過信號量s發送信號,進程可運行原語semSignal(s),即V操作;為了通過信號量s接收信號,進程可運行原語semWait(s),即P操作;假設對應的信號還沒有發送,則進程將被掛起,直至發送位置
?
???? 信號量可被看做死一個具有整數型的變量,有三個操作:
1. 一個信號量能夠初始化成非負數,一般資源數就是信號量的初始值
2. semWait操作,即P操作,使得信號量減1,假設值變成負數(s?<0) 則運行semWait的進程被堵塞,否則進程繼續運行
3. semSignal操作,即V操作,使得信號量加1,假設值小于或等于零,則被semWait操作堵塞的進程被解除堵塞
?
?
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; } }
?
?
總結
以上是生活随笔為你收集整理的信号量(一) 基础知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: find文件,tar打包和打包压缩
- 下一篇: tomcat变量环境脚本setclass