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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

生产者消费问题以及多生产者—消费者问题实现思想

發(fā)布時(shí)間:2024/3/12 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 生产者消费问题以及多生产者—消费者问题实现思想 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

  • 系統(tǒng)中有一組生產(chǎn)者進(jìn)程和一組消費(fèi)者進(jìn)程,生產(chǎn)者進(jìn)程每次生產(chǎn)一個(gè)產(chǎn)品放入緩沖區(qū),消費(fèi)者
  • 進(jìn)程每次從緩沖區(qū)中取出一個(gè)產(chǎn)品并使用。(注:這里的“產(chǎn)品”理解為某種數(shù)據(jù))
  • 生產(chǎn)者、消費(fèi)者共享一個(gè)初始為空、大小為n的緩沖區(qū)。
  • 只有 緩沖區(qū)沒(méi)滿(mǎn) 時(shí),生產(chǎn)者才能把產(chǎn)品放入緩沖區(qū),否則必須等待。 【緩沖區(qū)沒(méi)滿(mǎn)→生產(chǎn)者生產(chǎn)】

  • 只有 緩沖區(qū)不空 時(shí),消費(fèi)者才能從中取出產(chǎn)品,否則必須等待。 【緩沖區(qū)沒(méi)空→消費(fèi)者消費(fèi)】
  • 緩沖區(qū)是臨界資源,各進(jìn)程必須互斥地訪(fǎng)問(wèn)。
  • PV操作題目分析步驟:
    ①、關(guān)系分析。找出題目中描述的各個(gè)進(jìn)程,分析它們之間的同步、互斥關(guān)系。
    ②、整理思路。根據(jù)各進(jìn)程的操作流程確定P、V操作的大致順序。【生產(chǎn)者每次要消耗§一個(gè)空閑緩沖區(qū),并生產(chǎn)(V)一個(gè)產(chǎn)品。消費(fèi)者每次要消耗(P)一個(gè)產(chǎn)品,并釋放一個(gè)空閑緩沖區(qū)V) 。往緩沖區(qū)放入/取走產(chǎn)品需要互斥。】
    ③、設(shè)置信號(hào)量。并根據(jù)題目條件確定信號(hào)量初值。(互斥信號(hào)量初值一般為1,同步信號(hào)量的初
    始值要看對(duì)應(yīng)資源的初始值是多少)

(一)能否改變相鄰P、V操作的順序?

  • 若此時(shí)緩沖區(qū)內(nèi)已經(jīng)放滿(mǎn)產(chǎn)品,則 empty=0,full=n。
  • 則生產(chǎn)者進(jìn)程執(zhí)行① 使mutex變?yōu)?,再執(zhí)行②,由于已沒(méi)有空閑緩沖區(qū),因此生產(chǎn)者被阻塞。
  • 由于生產(chǎn)者阻塞,因此切換回消費(fèi)者進(jìn)程。消費(fèi)者進(jìn)程執(zhí)行③,由于mutex為0,即生產(chǎn)者還沒(méi)釋放對(duì)臨界資源的“鎖”,因此消費(fèi)者也被阻塞。
  • 這就造成了生產(chǎn)者等待消費(fèi)者釋放空閑緩沖區(qū),而消費(fèi)者又等待生產(chǎn)者釋放臨界區(qū)的情況,生產(chǎn)者和消費(fèi)者循環(huán)等待被對(duì)方喚醒,出現(xiàn)“死鎖”。
  • 同樣的,若緩沖區(qū)中沒(méi)有產(chǎn)品,即full=0,empty=n。按③④① 的順序執(zhí)行就會(huì)發(fā)生死鎖。
  • 因此, 實(shí)現(xiàn)互斥的P操作一定要在實(shí)現(xiàn)同步的P操作之后。
    V操作不會(huì)導(dǎo)致進(jìn)程阻塞,因此 兩個(gè)V操作順序可以交換。

  • 生產(chǎn)者消費(fèi)者問(wèn)題是一個(gè)互斥、同步的綜合問(wèn)題。
  • 有時(shí)候是消費(fèi)者需要等待生產(chǎn)者生產(chǎn),有時(shí)候是生產(chǎn)者要等待消費(fèi)者消費(fèi),這是兩個(gè)不同的“一前一后問(wèn)題”,因此也需要設(shè)置兩個(gè)同步信號(hào)量。

二、多生產(chǎn)者—消費(fèi)者問(wèn)題

  • 桌子上有一只盤(pán)子,每次只能向其中放入一個(gè)水果。爸爸專(zhuān)向盤(pán)子中放蘋(píng)果,媽媽專(zhuān)向盤(pán)子中放橘子,兒子專(zhuān)等著吃盤(pán)子中的橘子,女兒專(zhuān)等著吃盤(pán)子中的蘋(píng)果。只有盤(pán)子空時(shí),爸爸或媽媽才可向盤(pán)子中放一個(gè)水果。僅當(dāng)盤(pán)子中有自己需要的水果時(shí),兒子或女兒可以從盤(pán)子中取出水果。
  • 用PV操作實(shí)現(xiàn)上述過(guò)程。
  • 關(guān)系分析。找出題目中描述的各個(gè)進(jìn)程,分析它們之間的同步、互斥關(guān)系。
  • 整理思路。根據(jù)各進(jìn)程的操作流程確定P、V操作的大致順序。【互斥:在臨界區(qū)前后分別PV;同步:前V后P】
  • 設(shè)置信號(hào)量。設(shè)置需要的信號(hào)量,并根據(jù)題目條件確定信號(hào)量初值。(互斥信號(hào)量初值一般為1,同步信號(hào)量的初始值要看對(duì)應(yīng)資源的初始值是多少)
  • (一)如何實(shí)現(xiàn)?

    (二)問(wèn)題:可不可以不用互斥信號(hào)量?

    • 分析:剛開(kāi)始,兒子、女兒進(jìn)程即使上處理機(jī)運(yùn)行也會(huì)被阻塞。如果剛開(kāi)始是父親進(jìn)程先上處理機(jī)運(yùn)行,則:父親 P(plate),可以訪(fǎng)問(wèn)盤(pán)子→母親 P(plate),阻塞等待盤(pán)子→父親放入蘋(píng)果V(apple),女兒進(jìn)程被喚醒,其他進(jìn)程即使運(yùn)行也都會(huì)阻塞,暫時(shí)不可能訪(fǎng)問(wèn)臨界資源(盤(pán)子)→女兒 P(apple),訪(fǎng)問(wèn)盤(pán)子,V(plate),等待盤(pán)子的母親進(jìn)程被喚醒à母親進(jìn)程訪(fǎng)問(wèn)盤(pán)子(其他進(jìn)程暫時(shí)都無(wú)法進(jìn)入臨界區(qū))→……
    • 結(jié)論:即使不設(shè)置專(zhuān)門(mén)的互斥變量mutex,也不會(huì)出現(xiàn)多個(gè)進(jìn)程同時(shí)訪(fǎng)問(wèn)盤(pán)子的現(xiàn)象
    • 原因在于:本題中的緩沖區(qū)大小為1,在任何時(shí)刻,apple、orange、plate 三個(gè)同步信號(hào)量中最多只有一個(gè)是1。因此在任何時(shí)刻,最多只有一個(gè)進(jìn)程的P操作不會(huì)被阻塞,并順利地進(jìn)入臨界區(qū)…

    (三)如果盤(pán)子(緩沖區(qū))容量為2

    • 父親 P(plate),可以訪(fǎng)問(wèn)盤(pán)子→母親 P(plate),可以訪(fǎng)問(wèn)盤(pán)子→父親在往盤(pán)子里放蘋(píng)果,同時(shí)母親也可以往盤(pán)子里放橘子。于是就出現(xiàn)了兩個(gè)進(jìn)程同時(shí)訪(fǎng)問(wèn)緩沖區(qū)的情況,有可能導(dǎo)致兩個(gè)進(jìn)程寫(xiě)入緩沖區(qū)的數(shù)據(jù)相互覆蓋的情況。
    • 因此,如果緩沖區(qū)大小大于1,就必須專(zhuān)門(mén)設(shè)置一個(gè)互斥信號(hào)量 mutex 來(lái)保證互斥訪(fǎng)問(wèn)緩沖區(qū)。

    • 總結(jié):在生產(chǎn)者-消費(fèi)者問(wèn)題中,如果緩沖區(qū)大小為1,那么有可能不需要設(shè)置互斥信號(hào)量就可以實(shí)現(xiàn)互斥訪(fǎng)問(wèn)緩沖區(qū)的功能。當(dāng)然,這不是絕對(duì)的,要具體問(wèn)題具體分析。
    • 建議:在考試中如果來(lái)不及仔細(xì)分析,可以加上互斥信號(hào)量,保證各進(jìn)程一定會(huì)互斥地訪(fǎng)問(wèn)緩沖區(qū)。但需要注意的是,實(shí)現(xiàn)互斥的P操作一定要在實(shí)現(xiàn)同步的P操作之后,否則可能引起“死鎖”
    • PV 操作題目的解題思路:
      ①、關(guān)系分析。找出題目中描述的各個(gè)進(jìn)程,分析它們之間的同步、互斥關(guān)系。
      ②、整理思路。根據(jù)各進(jìn)程的操作流程確定P、V操作的大致順序。
      ③、設(shè)置信號(hào)量。設(shè)置需要的信號(hào)量,并根據(jù)題目條件確定信號(hào)量初值。(互斥信號(hào)量初值一般為1,同步信號(hào)量的初始值要看對(duì)應(yīng)資源的初始值是多少)

    • 解決“多生產(chǎn)者-多消費(fèi)者問(wèn)題”的關(guān)鍵在于理清復(fù)雜的同步關(guān)系。
    • 在分析同步問(wèn)題(一前一后問(wèn)題)的時(shí)候不能從單個(gè)進(jìn)程行為的角度來(lái)分析,要把“一前一后”發(fā)生的事看做是兩種“事件”的前后關(guān)系。
    • 比如,如果從單個(gè)進(jìn)程行為的角度來(lái)考慮的話(huà),我們會(huì)有以下結(jié)論:
      ①、如果盤(pán)子里裝有蘋(píng)果,那么一定要女兒取走蘋(píng)果后父親或母親才能再放入水果
      ②、如果盤(pán)子里裝有橘子,那么一定要兒子取走橘子后父親或母親才能再放入水果
    • 這么看是否就意味著要設(shè)置四個(gè)同步信號(hào)量分別實(shí)現(xiàn)這四個(gè)“一前一后”的關(guān)系了?
      正確的分析方法應(yīng)該從“事件”的角度來(lái)考慮,我們可以把上述四對(duì)“進(jìn)程行為的前后關(guān)系”抽象為一對(duì)“事件的前后關(guān)系”
    • 盤(pán)子變空事件→放入水果事件。“盤(pán)子變空事件”既可由兒子引發(fā),也可由女兒引發(fā);“放水果事件”
    • 既可能是父親執(zhí)行,也可能是母親執(zhí)行。這樣的話(huà),就可以用一個(gè)同步信號(hào)量解決問(wèn)題了

    總結(jié)

    以上是生活随笔為你收集整理的生产者消费问题以及多生产者—消费者问题实现思想的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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