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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

三、操作系统——生产者-消费者问题(两个同步一个互斥)

發布時間:2024/7/5 windows 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 三、操作系统——生产者-消费者问题(两个同步一个互斥) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、問題描述

信號量機制實現進程互斥的步驟:

  • 設置初值為1的互斥信號量
  • 在訪問臨界區之間進行P操作
  • 在訪問完臨界區之后進行V操作
  • 信號量機制實現進程同步的步驟:

  • 設置初值為0的同步信號量
  • 在前操作之后對同步信號量執行V操作
  • 在后操作之前對同步信號量執行P操作
  • 注意:
    前操作指的就是需要先進行的操作,比如:當緩沖區已滿的時候,消費者先取走緩沖區的產品,生產者才能生產產品放入緩沖區。這里的“消費者先取走緩沖區的產品”就是前操作;而” 生產者生產產品放入緩沖區“就是后操作


    注意:
    生產者-消費者問題中共存在3個信號量:一個是空閑緩沖區對應的信號量,一個是產品對應的信號量,還有一個是用來實現互斥訪問臨界區的互斥信號量

  • 生產者每次要消耗一個空閑緩沖區,而消耗一個資源(空閑緩沖區)也就是對這個資源的信號量執行P操作
    因為P操作會對這個資源的信號量的數值進行-1操作,如果該信號量-1后的數值 < 0,說明在沒有進行-1操作之前,信號量的數值 是<= 0的。也就是說,在沒有進行-1操作之前已經沒有資源(空閑緩沖區),資源(空閑緩沖區)的數量為0,所以會使用block原語使進程從運行態進入阻塞態,并把該進程掛到該信號量的等待隊列(即阻塞隊列)中。
    直到消費者釋放一個空閑緩沖區,也就是對空閑緩沖區對應的信號量執行了V操作之后,也就是增加一個空閑緩沖區之后,生產者進程才能再次被喚醒。

  • 生產者進程在確認了空閑緩沖區的數量是足夠的情況下,會生產一個產品(非空閑緩沖區),也就是對 產品所對應的信號量執行V操作。
    因為V操作會對產品所對應的信號量的數值進行+1操作,相當于是往空閑緩沖區中放了一個產品,即非空閑緩沖區數量+1。如果進行+1操作之后,該信號量的數值<=0,說明在沒有進行+1操作之前,該信號量的數值是<= -1的,這里的-1取絕對值之后代表的就是空閑緩沖區的數量,也就是等待隊列中的進程數量為1。這時,會使用wakeup原語喚醒等待隊列中的進程,讓等待隊列中的進程由阻塞態變為就緒態。
    而消費者在消耗一個產品之前,需要對這個產品所對應的信號量執行P操作,表示要消耗一個產品(即非空緩沖區)。

  • 二、問題分析


    三、如何實現?

    第一步:
    首先,明確生產者需要做2間事情:生產一個產品把產品放入緩沖區
    消費者也需要做2間事情:從緩沖區取出一個產品使用一個產品

    第二步:
    生產者生產一個產品之后,相當于是消耗了一個空閑的緩沖區,而空閑緩沖區的數量是由empty來控制的,需要將empty的數量進行-1操作,所以要在生產者生產一個產品之后執行P(empty)操作,表示消耗了一個空閑緩沖區

    第三步:
    生產者把產品放入緩沖區之后,相當于是增加了一個產品(非空閑緩沖區),而非空閑緩沖區的數量是由full來控制的,需要將full的數量進行+1操作,所以要在生產者把產品放入緩沖區之后執行V(full)操作,表示增加了一個產品(非空閑緩沖區)

    第四步:
    消費者從緩沖區取出一個產品之前,需要執行P(full)操作,表示要消耗一個產品(非空緩沖區)

    第五步:
    消費者在使用產品之前,需要執行V(empty)操作,表示要增加一個空閑緩沖區

    第六步:
    實現多個生產者對生產者把產品放入緩沖區這個臨界區的互斥訪問
    實現多個消費者對消費者從緩沖區取出產品這個臨界區的互斥訪問
    生產者把產品放入緩沖區的操作應該放在臨界區內,這樣才能避免存在多個生產者并發的執行 將產品放入緩沖區的代碼。所以要在進入臨界區之前執行P(mutex)操作,離開臨界區之后執行V(mutex)操作。
    消費者同理,需要在進入臨界區之前執行P(mutex)操作,離開臨界區之后執行V(mutex)操作。

    注意

  • 如果要實現互斥關系的話,這對P、V操作是在同一個進程中的
  • 如果要實現(一前一后的)同步關系的話,這對P、V操作是分別位于兩個不同的進程之中的


  • 對“前V后P”的理解:
    前操作之后執行V操作,后操作之前執行P操作

    在緩沖區為空的情況下:生產者生產產品需要在消費者消費產品之前。因此,在生產者生產產品之后,需要執行V(full)操作;消費者消費產品之前,需要執行P(full)操作

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的三、操作系统——生产者-消费者问题(两个同步一个互斥)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。