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

歡迎訪問 生活随笔!

生活随笔

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

windows

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

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

一、問題描述

信號量機制實現(xiàn)進程互斥的步驟:

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

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


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

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

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

  • 二、問題分析


    三、如何實現(xiàn)?

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

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

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

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

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

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

    注意

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


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

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

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

    總結(jié)

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

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