進(jìn)程間通信----信號(hào)量

1. 什么是信號(hào)量

????讓多個(gè)進(jìn)程(或線程,本文中的進(jìn)程跟線程不做區(qū)分,對(duì)進(jìn)程的應(yīng)用場(chǎng)景也可以使用在線程上)通過(guò)一個(gè)特殊變量來(lái)進(jìn)行交互,一個(gè)進(jìn)程在某個(gè)關(guān)鍵點(diǎn)上被迫停止執(zhí)行直到接受到某個(gè)特殊變量值。通過(guò)這一措施,任何復(fù)雜的進(jìn)程交互都可得到滿足,這種特殊的變量就是信號(hào)量。

????信號(hào)量可以看成是一種數(shù)據(jù)操作鎖,它本身不具有數(shù)據(jù)交換的功能,而是通過(guò)控制其他的通信資源(文件,外部設(shè)備)來(lái)實(shí)現(xiàn)進(jìn)程間通信,它本身只是一種外部資源的標(biāo)識(shí)。信號(hào)量在此過(guò)程中負(fù)責(zé)數(shù)據(jù)操作的互斥、同步等功能。

? ? 即:信號(hào)量就是一種特殊變量,其本質(zhì)就是一種變量。

????信號(hào)量機(jī)制由荷蘭學(xué)者Edsger Dijkstra在1965年提出。

2. 為什么要使用信號(hào)量

? ??為了防止出現(xiàn)因多個(gè)進(jìn)程同時(shí)訪問(wèn)一個(gè)共享資源而引發(fā)的一系列問(wèn)題,我們需要一種方法,在任一時(shí)刻只能有一個(gè)進(jìn)程訪問(wèn)代碼的臨界區(qū)域(臨界區(qū)是指訪問(wèn)臨界資源的那部分代碼,臨界資源是指一次僅允許一個(gè)進(jìn)程使用的資源)。?

????每個(gè)進(jìn)程中訪問(wèn)臨界資源的那段程序代碼稱為臨界區(qū),它需要獨(dú)占式地執(zhí)行。而信號(hào)量就可以提供這樣的一種訪問(wèn)機(jī)制,讓一個(gè)臨界區(qū)同一時(shí)間只有一個(gè)線程在訪問(wèn)它,也就是說(shuō)信號(hào)量是用來(lái)調(diào)協(xié)進(jìn)程對(duì)共享資源的訪問(wèn)的。

3. 信號(hào)量分類

????信號(hào)量一般分為兩類:

????一般信號(hào)量

? ? 信號(hào)量s為一個(gè)記錄型數(shù)據(jù)結(jié)構(gòu),其中value為整型變量,系統(tǒng)初始化時(shí)為其賦值,PV操作的原語(yǔ)描述如下:

? ? ? ? ? ? P:P是荷蘭語(yǔ)Passeren(通過(guò))的縮寫,將信號(hào)量s的value值減一,若結(jié)果小于零,則執(zhí)行P操作的進(jìn)程被堵塞,若結(jié)果大于等于零,則執(zhí)行P操作的進(jìn)程繼續(xù)執(zhí)行。

? ? ? ? ? ? V:V是荷蘭語(yǔ)Vrijgeven(釋放)的縮寫,將信號(hào)量s的value值加一,若結(jié)果不大于零,則執(zhí)行V操作的進(jìn)程從信號(hào)量s相關(guān)的list隊(duì)列中釋放一個(gè)進(jìn)程,使其轉(zhuǎn)化為就緒態(tài),自己則繼續(xù)執(zhí)行。若結(jié)果大于零,則執(zhí)行V操作的進(jìn)程繼續(xù)執(zhí)行。

????二值信號(hào)量

? ? 信號(hào)量s為一個(gè)記錄型數(shù)據(jù)結(jié)構(gòu),其value值只能取值為零或一,二值信號(hào)量PV操作的原語(yǔ)描述與一般信號(hào)量相同。

? ? 在實(shí)際簡(jiǎn)單項(xiàng)目開(kāi)發(fā)中,二值信號(hào)量的使用場(chǎng)景要多于一般信號(hào)量。

4. 信號(hào)量操作

????每個(gè)標(biāo)準(zhǔn)對(duì)信號(hào)量的實(shí)現(xiàn)提供了不同的方法,但基本的操作由信號(hào)量語(yǔ)義提出。針對(duì)信號(hào)量有四個(gè)操作,分別為:

? ??????1. 初始化(initialize),也叫做建立(create);

????????2. 等信號(hào)(wait),也可叫做掛起(suspend),即P操作;

????????3. 給信號(hào)(signal)或發(fā)信號(hào)(post),即V操作;

????????4. 清理(destroy)。

? ? 在實(shí)際的項(xiàng)目開(kāi)發(fā)中,信號(hào)量的使用要針對(duì)當(dāng)前的操作系統(tǒng)所支持的協(xié)議標(biāo)準(zhǔn)類型來(lái)使用,不同的協(xié)議標(biāo)準(zhǔn)所支持的信號(hào)量操作不同,具體的實(shí)現(xiàn)方式也不一致,但對(duì)于支持同一標(biāo)準(zhǔn)的不同操作系統(tǒng),所提供的信號(hào)量接口是一致的。

? ? 本模塊后續(xù)章節(jié)將針對(duì)具體的協(xié)議標(biāo)準(zhǔn)下的不同操作系統(tǒng)所實(shí)現(xiàn)的信號(hào)量接口進(jìn)行說(shuō)明。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 18.1信號(hào)量 回顧 ■并發(fā)問(wèn)題 多線程并發(fā)導(dǎo)致資源競(jìng)爭(zhēng) ■同步概念 協(xié)調(diào)多線程對(duì)共享數(shù)據(jù)的訪問(wèn) 任何時(shí)刻只能有一...
    龜龜51閱讀 2,165評(píng)論 0 0
  • 信號(hào)與信號(hào)量是不同的兩種事物。 什么是信號(hào)量 為了防止出現(xiàn)因多個(gè)程序同時(shí)訪問(wèn)一個(gè)共享資源而引發(fā)的一系列問(wèn)題,我們需...
    lintong閱讀 3,878評(píng)論 0 8
  • Unix進(jìn)程間通信(IPC) IPC概念: 進(jìn)程間通信(IPC,Inter-Process Communicati...
    metmax閱讀 899評(píng)論 0 1
  • 2017.12.09新夢(mèng)想學(xué)習(xí)感受有幾點(diǎn):1.學(xué)習(xí)了即興演講的公式,感覺(jué)很實(shí)用,接下來(lái)要多多運(yùn)用到公司; 2.昨晚...
    味道_1445閱讀 327評(píng)論 0 0
  • 春風(fēng)的暖意借給了冬季留存的只是回憶~夏至的烈酒浸潤(rùn)了冬季留存的只是冰啤~秋色的倒影分給了冬季留存的只是足跡~音樂(lè)節(jié)...
    絡(luò)琳閱讀 194評(píng)論 0 0

友情鏈接更多精彩內(nèi)容