操作系统(二十四)多生产者多消费者问题
生活随笔
收集整理的這篇文章主要介紹了
操作系统(二十四)多生产者多消费者问题
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
2.3.7 多生產(chǎn)者多消費(fèi)者問(wèn)題
? 桌子上有一只盤(pán)子,每次只能向其中放入一個(gè)水果。爸爸專向盤(pán)子中放蘋(píng)果,媽媽專向盤(pán)子中放橘子,兒子專等著吃盤(pán)子中的橘子,女兒專等著吃盤(pán)子中的蘋(píng)果。只有盤(pán)子空時(shí),爸爸或媽媽才可向盤(pán)子中放一個(gè)水果。僅當(dāng)盤(pán)子中有自己需要的水果時(shí),兒子或女兒可以從盤(pán)子中取出水果。用PV操作實(shí)現(xiàn)上述過(guò)程。 ? 不同于一個(gè)(類(lèi))生產(chǎn)者一個(gè)(類(lèi))消費(fèi)者問(wèn)題,本題目中含有多個(gè)生產(chǎn)者多個(gè)消費(fèi)者,但是臨界資源還是1且為互斥共享。很明顯這個(gè)題目的互斥關(guān)系為對(duì)盤(pán)子的訪問(wèn)要互斥進(jìn)行;這個(gè)題目的同步關(guān)系有三個(gè),1. 父親將蘋(píng)果放入盤(pán)子后,女兒才能取蘋(píng)果 2. 母親將橘子放入盤(pán)子后,兒子才能取橘子 3. 只有在兒子或者女兒取出了水果之后父母才能放水果。用前驅(qū)圖表示同步關(guān)系如下:semaphore mutex = 1; //實(shí)現(xiàn)互斥訪問(wèn)盤(pán)子(緩沖區(qū)) semaphore apple = 0; //盤(pán)子中有幾個(gè)蘋(píng)果 semaphore orange = 0; //盤(pán)子中有幾個(gè)橘子 semaphore plate = 1; //盤(pán)子中還可以放多少個(gè)水果dad (){while(1){準(zhǔn)備一個(gè)蘋(píng)果;P(plate);P(mutex);把蘋(píng)果放入盤(pán)子;V(mutex);V(apple);} }mom (){while(1){準(zhǔn)備一個(gè)橘子;P(plate);P(mutex);把橘子放入盤(pán)子;V(mutex);V(orange);} }daughter (){while(1){P(apple);P(mutex);從盤(pán)中取出蘋(píng)果;V(mutex);V(plate);吃掉蘋(píng)果;} }son (){while(1){P(orange);P(mutex);從盤(pán)中取出橘子;V(mutex);V(plate);吃掉橘子;} }
? 可能有的同學(xué)會(huì)問(wèn)為什么設(shè)置了一個(gè)mutex=1還要再有一個(gè)plate=1呢?mutex完成的任務(wù)是保證互斥,其值并無(wú)實(shí)際意義;plate代表的是緩沖區(qū)的大小,可以隨著題目條件而改變。順便一提,其實(shí)在本題中mutex可以不要,因?yàn)樵谌魏螘r(shí)候apple、orange、plate 三個(gè)同步信號(hào)量中最多只有一個(gè)是1。因此在任何時(shí)刻,最多只有一個(gè)進(jìn)程的P操作不會(huì)被阻塞,并順利地進(jìn)入臨界區(qū)。但是再平常的時(shí)候我們還是寫(xiě)上互斥信號(hào)量比較好。
總結(jié)
以上是生活随笔為你收集整理的操作系统(二十四)多生产者多消费者问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 新版微信来了
- 下一篇: 操作系统(二十五)吸烟者问题-单生产者多