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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

生产者消费者问题

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

文章目錄

      • 1.生產(chǎn)者消費(fèi)者問題
        • 1.1 問題描述
        • 1.2 問題分析
        • 1.3 如何實(shí)現(xiàn)
        • 1.4 思考
          • ① -> ② -> ③
          • ③ -> ④ -> ①
        • 1.5 小結(jié)
      • 2.多生產(chǎn)者 - 多消費(fèi)者
        • 2.1 問題描述
        • 2.2 問題分析
        • 2.3 如何實(shí)現(xiàn)
        • 2.4 小結(jié)

1.生產(chǎn)者消費(fèi)者問題

1.1 問題描述

系統(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ū)沒滿時(shí),生產(chǎn)者才能把產(chǎn)品放入緩沖區(qū),否則必須等待。(緩沖區(qū)沒滿 ——>生產(chǎn)者生產(chǎn))
只有緩沖區(qū)不空時(shí),消費(fèi)者才能從中取出產(chǎn)品,否則必須等待。(緩沖區(qū)沒空——>消費(fèi)者消費(fèi))
緩沖區(qū)是臨界資源,各進(jìn)程必須互斥地訪問。(互斥關(guān)系)

1.2 問題分析

PV操作題目分析步驟:

  • 關(guān)系分析。找出題目中描述的各個(gè)進(jìn)程,分析它們之間的同步、互斥關(guān)系。
  • 整理思路。根據(jù)各進(jìn)程的操作流程確定P、V操作的大致順序。
  • 設(shè)置信號(hào)量。并根據(jù)題目條件確定信號(hào)量初值。(互斥信號(hào)量初值一般為1,同步信號(hào)量的初始值要看對(duì)應(yīng)資源的初始值是多少)
  • semaphore mutex = 1; // 互斥信號(hào)量,實(shí)現(xiàn)對(duì)緩沖區(qū)的互斥訪問 semaphore empty = n; // 同步信號(hào)量,表示空閑緩沖區(qū)的數(shù)量 semaphore full = 0; // 同步信號(hào)量,表示產(chǎn)品的數(shù)量,也即非空緩沖區(qū)的數(shù)量

    1.3 如何實(shí)現(xiàn)

    1.4 思考

    思考:能否改變相鄰P、V操作的順序?

    ① -> ② -> ③

    若此時(shí)緩沖區(qū)內(nèi)已經(jīng)放滿產(chǎn)品,則empty=0,full=n。

    則生產(chǎn)者進(jìn)程執(zhí)行①使mutex變?yōu)?,再執(zhí)行②,由于已沒有空閑緩沖區(qū),因此生產(chǎn)者被阻塞。由于生產(chǎn)者阻塞,因此切換回消費(fèi)者進(jìn)程。消費(fèi)者進(jìn)程執(zhí)行③,由于mutex為0,即生產(chǎn)者還沒釋放對(duì)臨界資源的“鎖”,因此消費(fèi)者也被阻塞。這就造成了生產(chǎn)者等待消費(fèi)者釋放空閑緩沖區(qū),而消費(fèi)者又等待生產(chǎn)者釋放臨界區(qū)的情況,生產(chǎn)者和消費(fèi)者循環(huán)等待被對(duì)方喚醒,出現(xiàn)“死鎖”。

    ③ -> ④ -> ①

    同樣的,若緩沖區(qū)中沒有產(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操作順序可以交換。

    1.5 小結(jié)

    易錯(cuò)點(diǎn):實(shí)現(xiàn)互斥和實(shí)需要“前V后P”現(xiàn)同步的兩個(gè)P操作的先后順序(死鎖問題)

    2.多生產(chǎn)者 - 多消費(fèi)者

    2.1 問題描述

    桌子上有一只盤子,每次只能向其中放入一個(gè)水果。爸爸專向盤子中放蘋果,媽媽專向盤子中放橘子,兒子專等著吃盤子中的橘子,女兒專等著吃盤子中的蘋果。只有盤子空時(shí),爸爸或媽媽才可向盤子中放一個(gè)水果。僅當(dāng)盤子中有自己需要的水果時(shí),兒子或女兒可以從盤子中取出水果。
    用PV操作實(shí)現(xiàn)上述過程。

    2.2 問題分析

    • 互斥關(guān)系:(mutex = 1)
      對(duì)緩沖區(qū)(盤子)的訪問要互斥地進(jìn)行

    • 同步關(guān)系(一前一后):

  • 父親將蘋果放入盤子后,女兒才能取蘋果

  • 母親將橘子放入盤子后,兒子才能取橘子

  • 只有盤子為空時(shí),父親或母親才能放入水果

  • 2.3 如何實(shí)現(xiàn)

    semaphore mutex = 1; // 實(shí)現(xiàn)互斥訪問盤子(緩沖區(qū)) semaphore apple = 0; // 盤子中有幾個(gè)蘋果 semaphore orange = 0; // 盤子中有幾個(gè)橘子 semaphore plate = 1; // 盤子中還可以放多少個(gè)水果

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

    結(jié)論:即使不設(shè)置專門的互斥變量mutex,也不會(huì)出現(xiàn)多個(gè)進(jìn)程同時(shí)訪問盤子的現(xiàn)象

    原因在于:本題中的緩沖區(qū)大小為1,在任何時(shí)刻,apple、 orange、 plate 三個(gè)同步信號(hào)量中最多只有一個(gè)是1。因此在任何時(shí)刻,最多只有一個(gè)進(jìn)程的P操作不會(huì)被阻塞,并順利地進(jìn)入臨界區(qū)…

    semaphore apple = 0; // 盤子中有幾個(gè)蘋果 semaphore orange = 0; // 盤子中有幾個(gè)橘子 semaphore plate = 2; // 盤子中還可以放多少個(gè)水果

    父親P(plate) ,可以訪問盤子 -----> 母親P(plate) ,可以訪問盤子 ----->父親在往盤子里放蘋果,同時(shí)母親也可以往盤子里放橘子。于是就出現(xiàn)了兩個(gè)進(jìn)程同時(shí)訪問緩沖區(qū)的情況,有可能導(dǎo)致兩個(gè)進(jìn)程寫入緩沖區(qū)的數(shù)據(jù)相互覆蓋的情況。

    因此,如果緩沖區(qū)大小大于1,就必須專門設(shè)置一個(gè)互斥信號(hào)量 mutex 來保證互斥訪問緩沖區(qū)。

    2.4 小結(jié)

    總結(jié):在生產(chǎn)者 - 消費(fèi)者問題中,如果緩沖區(qū)大小為1,那么有可能不需要設(shè)置互斥信號(hào)量就可以實(shí)現(xiàn)互斥訪問緩沖區(qū)的功能。當(dāng)然,這不是絕對(duì)的,要具體問題具體分析。

    建議:在考試中如果來不及仔細(xì)分析,可以加上互斥信號(hào)量,保證各進(jìn)程一定會(huì)互斥地訪問緩沖區(qū)。但需要注意的是,實(shí)現(xiàn)互斥的P操作一定要在實(shí)現(xiàn)同步的P操作之后,否則可能引起“死鎖”。

    PV 操作題目的解題思路:

  • 關(guān)系分析。找出題目中描述的各個(gè)進(jìn)程,分析它們之間的同步、互斥關(guān)系。
  • 整理思路。根據(jù)各進(jìn)程的操作流程確定P、V操作的大致順序。
    要在實(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)資源的初始值是多少)
  • 總結(jié)

    以上是生活随笔為你收集整理的生产者消费者问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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