P操作和V操作

2021-06-21 16:53:46 字數 1823 閱讀 4142

可以這樣理解:

臨界區門前有棵樹

用來掛紅燈

程序想進cpu的門

先得上樹取下盞燈(呼叫一次p)

取下乙個去敲門(s=s-1)

如果樹上沒有燈取(s<=0)

樹說暫時欠你一盞燈(s為負時)

程序沒轍只好在門外邊排隊等(wait(s))

得燈的程序繼續執行執行完了要出門(呼叫一次v)

馬上還回一盞燈(s=s+1)

若有程序在催債(s<=0)

放個程序進去完成(release(s))

概念難點解析

v原語的主要操作是:

(1)sem加1;

(2)若相加結果大於零,則程序繼續執行;

(3)若相加結果小於或等於零,則喚醒一阻塞在該訊號量上的程序,然後再返回原程序繼續執行或轉程序排程。

典型理解偏差:

一,以v原語的1、2步來做,sem不就永遠大於0,那程序不就一直迴圈執行成為死迴圈了?

二,sem大於0那就表示有臨界資源可供使用,為什麼不喚醒程序?

三,sem小於0應該是說沒有臨界資源可供使用,為什麼還要喚醒程序?

析疑:一,p操作對sem減1的。p、v原語必須成對使用!從而不會造成死迴圈。

二,sem大於0的確表示有臨界資源可供使用,而且這個時候沒有程序被阻塞在這個資源上,也就是說沒有程序因為得不到這類資源而阻塞,所以沒有被阻塞的程序,自然不需要喚醒。

三,v原語操作的本質在於:乙個程序使用完臨界資源後,釋放臨界資源,使sem加1,以通知其它的程序,這個時候如果sem<0,表明有程序阻塞在該類資源上,因此要從阻塞佇列裡喚醒乙個程序來「轉手」該類資源。

比如,有2個某類資源,三個程序a、b、c、d要用該類資源,最開始sem=2,當a進入,sem=1,當b進入sem=0,表明該類資源剛好用完,

當c進入時sem=-1,表明有乙個程序被阻塞了,d進入,sem=-2。當a用完該類資源時,進行v操作,sem=-1,釋放該類資源,而這時sem<0,表明有程序阻塞在該類資源上,於是喚醒乙個。

為了進一步加深理解,再引入二個問題:

四,如果是互斥訊號量的話,應該設定訊號量sen=1,但是當有5個程序都訪問的話,最後在該訊號量的煉表裡會有4個在等待,也是說s=-4,那麼第乙個程序執行了v操作使s加1,釋放了資源,下乙個應該能夠執行,但喚醒的這個程序在執行p操作時因s〈0 ,也還是執行不了,這是怎麼回事呢?

五,sem的絕對值表示等待的程序數,同時又表示臨界資源,這到底是怎麼回事?

析疑:四,當乙個程序阻塞了的時候,它已經執行過了p操作,並卡在臨界區那個地方。當喚醒它時就立即進入它自己的臨界區,並不需要執行p操作了,當執行完了臨界區的程式後,就執行v操作。

五,當訊號量sem小於0時,其絕對值表示系統中因請求該類資源而被阻塞的程序數目.s大於0時表示可用的臨界資源數。注意在不同情況下所表達的含義不一樣。當等於0時,表示剛好用完。

★ 訊號量、pv操作是解決程序間的同步與互斥問題的。

★ 做題時尤其要注意隱藏的同步、互斥問題。這些問題通常可以歸入生產者-消費者問題和閱讀者-寫入者問題。

★ pv操作一定是成對出現的,但是這不意味著它會在乙個程序內成對出現。

★ 在互斥關係中,pv操作一定是在乙個程序內成對出現。而且,訊號一定大於0,具體多少視情況而定。而對於同步關係,則一對pv操作在兩個程序或者更多的程序中出現。

★ 對於同步關係,訊號量可能為0,也可能不為0;用於同步的訊號個數可能1個,也可能是多個。

★ 對訊號量為1的,應該先執行v操作。

★ 在生產者-消費者問題中,要設定三個訊號量:empty-空閒的快取區數量,初值為n;full-已填充的快取區數量,初值為0;mutex-保證只有乙個程序在寫入快取區,初值為1。

★ 乙個非常好的**:

樣式操作和類操作

樣式操作 樣式屬性操作 css 作用 設定 獲取元素的樣式屬性值 1 設定樣式屬性操作 設定單個樣式 第乙個引數 樣式屬性名稱 第二個引數 樣式屬性值 設定多個樣式 引數為 物件 2 獲採樣式屬性操作 引數表示要獲取的樣式的屬性名稱 類操作1 新增類樣式 addclass 為指定元素新增類 注意 此...

Python 檔案操作 和 目錄操作

我們知道,檔名 目錄名和鏈結名都是用乙個字串作為其識別符號的,但是給我們乙個識別符號,我們該如何確定它所指的到底是常規檔案檔名 目錄名還是鏈結名呢?這時,我們可以使用os.path模組提供的isfile函式 isdir函式和islink函式來達成我們的目標,如下所示 print myfile,是乙個...

jQuery 屬性操作和CSS 操作

addclass attr hasclass html removeattr removeclass toggleclass val css p css color 取得第乙個段落的 color 樣式屬性的值 selector css name,value 設定所有匹配元素的指定 css 屬性 se...