第二章 進(jìn)程的描述與控制4

2.4經(jīng)典同步問題

一、生產(chǎn)者-消費(fèi)者問題

1、使用場(chǎng)景:多個(gè)生產(chǎn)者和消費(fèi)者對(duì)n個(gè)緩沖區(qū)的使用。

2、

1)無論生產(chǎn)者、消費(fèi)者使用緩沖池時(shí)應(yīng)保證互斥使用(互斥信號(hào)量mutex)

2)生產(chǎn)者和消費(fèi)者間交叉有序:

有序的控制最根源在產(chǎn)品數(shù)量上。

設(shè)置兩個(gè)信號(hào)量:分別針對(duì)生產(chǎn)者、消費(fèi)者設(shè)置不同的信號(hào)量,empty和full分別表示緩沖池中空緩沖池和滿緩沖池(即產(chǎn)品)的數(shù)量。

注意:empty、full兩者有天然的數(shù)量關(guān)系,在PV控制下值不斷變化,但在值等于0的點(diǎn)上是控制順序的關(guān)鍵。

3、檢查:

1)每個(gè)程序中用于實(shí)現(xiàn)互斥的wait(mutex)和signal(mutex)必須成對(duì)地出現(xiàn)。

2)控制順序的信號(hào)量empty和full的wait和signal操作,成對(duì)地出現(xiàn)在不同的進(jìn)程中。

3)在每個(gè)程序中的多個(gè)wait操作順序不能顛倒。且應(yīng)先執(zhí)行對(duì)資源信號(hào)量的wait操作,再執(zhí)行對(duì)互斥信號(hào)量的wait操作,否則可能引起進(jìn)程死鎖。

4)模擬交替執(zhí)行過程,檢查控制是否正確。

二、哲學(xué)家進(jìn)餐問題

1、記錄型信號(hào)量解決哲學(xué)家進(jìn)餐問題

筷子是臨界資源,在一段時(shí)間內(nèi)只允許一個(gè)哲學(xué)家使用。

所有信號(hào)量均被初始化為1。

2、就餐死鎖問題

解決方法:

1)數(shù)量控制:限制并發(fā)執(zhí)行的進(jìn)程數(shù)

2)一刀切:采用AND信號(hào)量。

3)IF編程控制

三、讀者——寫者問題

1、一個(gè)數(shù)據(jù)文件被多個(gè)進(jìn)程共享。

2、合理的同步關(guān)系是:

1)多個(gè)讀進(jìn)程可同時(shí)讀;

2)Writer進(jìn)程與任何其他進(jìn)程(包括Reader進(jìn)程或其他Writer進(jìn)程)不允許同時(shí)訪問文件。

3、解決讀者問題的關(guān)鍵:

除第1讀者,其他讀者不申請(qǐng)讀寫互斥信號(hào)量,防止讀者間互斥。


2.5信號(hào)量習(xí)題

一、黑白棋子問題

先搶到棋盤者先下,然后輪流下子

1)無法用單純的信號(hào)量操作完成,因?yàn)槌跏贾禑o法設(shè)置固定值。

2)利用互斥信號(hào)量與特殊標(biāo)志變量的結(jié)合使用實(shí)現(xiàn)有序控制。

二、嗜睡的理發(fā)師問題

1、共享變量count的使用需要互斥。

2、注意if分支加入后P、V操作配對(duì)核對(duì)清楚

?著作權(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)容

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