日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

PV操作

發(fā)布時(shí)間:2023/12/13 综合教程 39 生活家
生活随笔 收集整理的這篇文章主要介紹了 PV操作 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

P操作和V操作是不可中斷的程序段,稱為原語,PV原語及信號量的概念都是由荷蘭科學(xué)家E.W.Dijkstra提出的。

信號量sem是一個(gè)整數(shù),Sem大于等于零時(shí)代表可供并發(fā)進(jìn)程使用的資源實(shí)體數(shù),sem小于零時(shí)則表示正在等待申請資源的進(jìn)程數(shù)。

P原語操作

(1)sem減 1 ;

(2)若sem大于等于0,則請求的進(jìn)程繼續(xù)執(zhí)行;

(3)若sem小于0,則進(jìn)程被阻塞后進(jìn)入與該信號相對應(yīng)的等待隊(duì)列中,然后轉(zhuǎn)進(jìn)程調(diào)度。

V原語操作

(1)sem加 1 ;

(2)若sem大于0,則請求的進(jìn)程繼續(xù)執(zhí)行;

(3)若sem小于等于0,則從該信號的等待隊(duì)列中喚醒一個(gè)等待進(jìn)程,然后再返回原進(jìn)程繼續(xù)執(zhí)行或轉(zhuǎn)進(jìn)程調(diào)度。

注意事項(xiàng):

⑴每個(gè)程序中用戶實(shí)現(xiàn)互斥的P、V操作必須成對出現(xiàn),先做P操作,進(jìn)臨界區(qū),后做V操作,出臨界區(qū)。若有多個(gè)分支,要認(rèn)真檢查其成對性。

⑵P、V操作應(yīng)分別緊靠臨界區(qū)的頭尾部,臨界區(qū)的代碼應(yīng)盡可能短,不能有死循環(huán)。

⑶互斥信號量的初值一般為1。

典型問題:

1、V操作中 ,Sem大于0那就表示有可供使用,為什么不喚醒進(jìn)程?

==》Sem大于0的確表示有臨界資源可供使用,而且這個(gè)時(shí)候沒有進(jìn)程被阻塞在這個(gè)資源上,也就是說沒有進(jìn)程因?yàn)榈貌坏竭@類資源而阻塞,所以沒有被阻塞的進(jìn)程,自然不需要喚醒。

2、V操作中 ,Sem小于等于0應(yīng)該是說沒有臨界資源可供使用,為什么還要喚醒進(jìn)程?

==》V原語操作的本質(zhì)在于:一個(gè)進(jìn)程使用完臨界資源后,釋放臨界資源,使Sem加1,以通知其它的進(jìn)程。這個(gè)時(shí)候如果Sem<=0,表明有進(jìn)程阻塞在該類資源上,因此要從等待隊(duì)列里喚醒一個(gè)進(jìn)程來“轉(zhuǎn)手”該類資源。

比如,有兩個(gè)某類資源,四個(gè)進(jìn)程A、B、C、D要用該類資源,最開始Sem=2,當(dāng)A進(jìn)入,Sem=1;當(dāng)B進(jìn)入Sem=0,表明該類資源剛好用完;當(dāng)C進(jìn)入時(shí)Sem=-1,表明有一個(gè)進(jìn)程被阻塞了;D進(jìn)入,Sem=-2。當(dāng)A用完該類資源時(shí),進(jìn)行V操作,Sem=-1,釋放該類資源,而這時(shí)Sem<=0,表明有進(jìn)程阻塞在該類資源上,于是喚醒一個(gè)。

3、Sem的絕對值表示等待的進(jìn)程數(shù),同時(shí)又表示臨界資源,這到底是怎么回事?

==》當(dāng)信號量Sem小于0時(shí),其絕對值表示因請求該類資源而被阻塞的進(jìn)程數(shù)目。S大于0時(shí)表示可用的臨界資源數(shù)。注意在不同情況下所表達(dá)的含義不一樣。當(dāng)S等于0時(shí),表示臨界資源剛好用完。

4、如果是互斥的話,應(yīng)該設(shè)置信號量Sem=1,但是當(dāng)有5個(gè)進(jìn)程都訪問的話,最后在該信號量的鏈表里會有4個(gè)在等待,也是說S=-4,那么第一個(gè)進(jìn)程執(zhí)行了V操作使S加1,釋放了資源,下一個(gè)應(yīng)該能夠執(zhí)行,但喚醒的這個(gè)進(jìn)程在執(zhí)行P操作時(shí)因S<0,也還是執(zhí)行不了,這是怎么回事呢?

==》當(dāng)一個(gè)進(jìn)程阻塞了的時(shí)候,它已經(jīng)執(zhí)行過了P操作,并卡在那個(gè)地方。當(dāng)喚醒它時(shí)就立即進(jìn)入它自己的臨界區(qū),并不需要執(zhí)行P操作了,當(dāng)執(zhí)行完了臨界區(qū)的程序后,就執(zhí)行V操作。

參考自:PV操作原理概述-dyli2000-ChinaUnix博客

總結(jié)

以上是生活随笔為你收集整理的PV操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。