2.3.6 操作系统之进程同步与互斥经典问题(生产者-消费者问题、多生产者-多消费者问题、吸烟者问题、读者-写者问题、哲学家进餐问题)
生活随笔
收集整理的這篇文章主要介紹了
2.3.6 操作系统之进程同步与互斥经典问题(生产者-消费者问题、多生产者-多消费者问题、吸烟者问题、读者-写者问题、哲学家进餐问题)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 0.前言
- 1.生產(chǎn)者-消費(fèi)者問題
- (1)問題描述
- (2)問題分析
- (3)如何實現(xiàn)?
- (4)實現(xiàn)互斥的P操作一定要在實現(xiàn)同步的P操作之后
- (5)知識回顧與重要考點
- 2.多生產(chǎn)者-多消費(fèi)者問題
- (1)問題描述
- (2)問題分析
- (3)實現(xiàn)方法
- ① 有mutex
- ② 無mutex
- ③ 為什么有mutex和沒有mutex一樣呢?
- ④ 如果有兩個盤子plate
- (4)知識總結(jié)與重要考點
- 3.讀者-寫者問題
- (1)問題描述
- (2)問題分析
- (3)實現(xiàn)方法
- ① 給count加mutex互斥訪問
- ② 加一個w實現(xiàn)“讀寫公平法”
- (4)知識回顧與重要考點
- 4.吸煙者問題
- (1)問題描述
- (2)問題分析
- (3)實現(xiàn)方法
- (4)知識回顧與重要考點
- 5.哲學(xué)家進(jìn)餐問題
- (1)問題描述
- (2)問題分析
- (3)如何實現(xiàn)
- (4)知識回顧與重要考點
0.前言
- 同步時,前V后P。
1.生產(chǎn)者-消費(fèi)者問題
(1)問題描述
- 系統(tǒng)中有一組生產(chǎn)者進(jìn)程和一組消費(fèi)者進(jìn)程,生產(chǎn)者進(jìn)程每次生產(chǎn)一個產(chǎn)品放入緩沖區(qū),消費(fèi)者進(jìn)程每次從緩沖區(qū)中取出一個產(chǎn)品并使用。(注: 這里的“產(chǎn)品”理解為某種數(shù)據(jù))
- 生產(chǎn)者、消費(fèi)者共享一個初始為空、大小為n的緩沖區(qū)。
- 只有緩沖區(qū)沒滿時,生產(chǎn)者才能把產(chǎn)品放入緩沖區(qū),否則必須等待。
- 只有緩沖區(qū)不空時,消費(fèi)者才能從中取出產(chǎn)品,否則必須等待。
- 緩沖區(qū)是臨界資源,各進(jìn)程必須互斥地訪問。
(2)問題分析
- 1)關(guān)系分析。生產(chǎn)者和消費(fèi)者對緩沖區(qū)互斥訪問是互斥關(guān)系,同時生產(chǎn)者和消費(fèi)者又是一個相互協(xié)作的關(guān)系,只有生產(chǎn)者生產(chǎn)之后,消費(fèi)者才能消費(fèi),它們也是同步關(guān)系。
- 2)整理思路。根據(jù)各進(jìn)程的操作流程確定P、V操作的大致順序。
生產(chǎn)者每次要消耗(P)一個空閑緩沖區(qū),并生產(chǎn)(V)一個產(chǎn)品。
消費(fèi)者每次要消耗(P)一個產(chǎn)品,并釋放一個空閑緩沖區(qū)(V)。
往緩沖區(qū)放入/取走產(chǎn)品需要互斥。 - 3)信號量設(shè)置。設(shè)置信號量。設(shè)置需要的信號量,并根據(jù)題目條件確定信號量初值。( 互斥信號量初值一般為1,同步信號量的初始值要看對應(yīng)資源的初始值是多少)
(3)如何實現(xiàn)?
(4)實現(xiàn)互斥的P操作一定要在實現(xiàn)同步的P操作之后
(5)知識回顧與重要考點
2.多生產(chǎn)者-多消費(fèi)者問題
(1)問題描述
(2)問題分析
(3)實現(xiàn)方法
① 有mutex
② 無mutex
③ 為什么有mutex和沒有mutex一樣呢?
- 原因在于:本題中的緩沖區(qū)大小為1,在任何時刻,apple、 orange、 plate 三個同步信號量中最多只有一個是1。因此在任何時刻,最多只有一個進(jìn)程的P操作不會被阻塞,并順利地進(jìn)入臨界區(qū)…
④ 如果有兩個盤子plate
(4)知識總結(jié)與重要考點
- 總結(jié):在生產(chǎn)者_(dá)消費(fèi)者問題中,如果緩沖區(qū)大小為1,那么有可能不需要設(shè)置互斥信號量就可以實現(xiàn)互斥訪問緩沖區(qū)的功能。當(dāng)然,這不是絕對的,要具體問題具體分析。
- 建議:在考試中如果來不及仔細(xì)分析,可以加上互斥信號量,保證各進(jìn)程一定會互斥地訪問緩沖區(qū)。但需要注意的是,·實現(xiàn)互斥的P操作一定要在實現(xiàn)同步的P操作之后·,否則可能引起·“死鎖”·。
3.讀者-寫者問題
(1)問題描述
(2)問題分析
(3)實現(xiàn)方法
① 給count加mutex互斥訪問
- 這里說一下為什么要加mutex。
- 比如:當(dāng)count=0時,第一個讀者進(jìn)程執(zhí)行到p(rw),rw=0,假設(shè)此時時間片到了,切換到第二個讀者進(jìn)程,第二個進(jìn)程發(fā)現(xiàn)count=0,則執(zhí)行p(rw),但是此時rw=0,于是第二個進(jìn)程被堵在p(rw)這里,同理,后面的可能會有多個進(jìn)程堵在p(rw),只有當(dāng)?shù)谝粋€進(jìn)程再次獲得時間片,執(zhí)行count++,讓count不為0,然后其他進(jìn)程就可以直接繞過if直接進(jìn)行count++來訪問文件,但是第三個讀者進(jìn)程和后面的幾個可能堵在p(rw)的多個讀者進(jìn)程則必須得等count–為0后才可以再次和寫進(jìn)程競爭來訪問文件,對count的訪問沒有做到一氣呵成,會導(dǎo)致本來一些進(jìn)程一直堵在p(rw)。
② 加一個w實現(xiàn)“讀寫公平法”
- 在上面的算法中,讀進(jìn)程是優(yōu)先的,即當(dāng)存在讀進(jìn)程時,寫操作將被延遲,且只要有 一個讀進(jìn)程活躍,隨后而來的讀進(jìn)程都將被允許訪問文件。這樣的方式會導(dǎo)致寫進(jìn)程可能長時間等待,且存在寫進(jìn)程“餓死”的情況。
- 若希望寫進(jìn)程優(yōu)先,即當(dāng)有讀進(jìn)程正在讀共享文件時,有寫進(jìn)程請求訪問,這時應(yīng)禁止后續(xù)讀進(jìn)程的請求,等到已在共享文件的讀進(jìn)程執(zhí)行完畢,立即讓寫進(jìn)程執(zhí)行,只有在無寫進(jìn)程執(zhí)行的情況下才允許讀進(jìn)程再次運(yùn)行。為此,增加一個信號量并在上面程序的writer()和 reader()函數(shù)中各增加一對PV操作,就可以得到寫進(jìn)程優(yōu)先的解決程序。
(4)知識回顧與重要考點
4.吸煙者問題
(1)問題描述
(2)問題分析
(3)實現(xiàn)方法
(4)知識回顧與重要考點
5.哲學(xué)家進(jìn)餐問題
(1)問題描述
(2)問題分析
(3)如何實現(xiàn)
(4)知識回顧與重要考點
參考:https://www.bilibili.com/video/BV1YE411D7nH?p=26
總結(jié)
以上是生活随笔為你收集整理的2.3.6 操作系统之进程同步与互斥经典问题(生产者-消费者问题、多生产者-多消费者问题、吸烟者问题、读者-写者问题、哲学家进餐问题)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.2 《数据库系统概论》之关系操作、关
- 下一篇: 4.3 计算机网络之IPv4(IPv4分