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

歡迎訪問 生活随笔!

生活随笔

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

windows

四、操作系统——读者写者问题(详解)

發布時間:2024/7/5 windows 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 四、操作系统——读者写者问题(详解) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、問題描述:

二、需要滿足的條件:

  • 寫進程與寫進程之間必須互斥的寫入數據(因為如果兩個寫進程同時對共享數據中的區域A中的數據進行寫操作的話,會導致數據錯誤覆蓋的問題
  • 寫進程與讀進程之間必須互斥的訪問共享數據(因為寫進程與讀進程如果同時訪問共享數據,可能會導致數據不一致的問題。比如:讀進程A想要訪問共享數據中的B數據,但是寫進程C在讀進程A訪問B數據之前將B數據進行了更新,這就會導致讀進程A讀不到它想要讀到的數據,從而出現數據不一致問題
  • 讀進程與讀進程之間可以同時訪問數據,不需要實現互斥的訪問共享數據(因為讀進程讀數據,并不會像之前的生產者消費者問題中的消費者那樣改變數據或者是將數據清空,所以多個讀進程可以同時訪問共享數據)
  • 三、解題思路:

  • 第一步解決寫進程與寫進程之間必須互斥的寫入數據寫進程與讀進程之間必須互斥的訪問共享數據 兩個問題。
  • 上面這種實現方式確實解決了了寫進程與寫進程之間必須互斥的寫入數據寫進程與讀進程之間必須互斥的訪問共享數據 這兩個問題。但是,
    假設讀進程A正在訪問共享數據,執行了P(rw) 和 讀數據操作,還沒有執行V操作解鎖,此時讀進程B也想訪問共享數據,此時,讀進程B會卡在P(rw)中的循環里面,也就是說進程B被阻塞了。
    讀進程與讀進程之間也變成了必須互斥訪問共享數據,并不滿足題目讀進程與讀進程可以同時訪問共享數據的要求

  • 下面來實現多個讀進程可以同時訪問共享數據
    解決方法:
    引入count變量,用來記錄當前有幾個讀進程在訪問共享數據。
  • 上述實現方法表面上看達到了實現多個讀進程可以同時訪問共享數據的目的,但其實還是存在問題的。
    存在的問題:
    如果讀進程A想要訪問共享數據,并且執行了P(rw)“上鎖”操作,此時,讀進程B也想要訪問共享數據,也會執行P(rw),但是因為進程A已經執行了“上鎖”操作,所以進程B還是會被阻塞,無法訪問共享數據。可見,仍然沒有達到多個讀進程可以同時訪問共享數據的目的!
    出現這種問題的原因:
    對于count變量的檢查與賦值操作無法“一氣呵成”,可以被中斷。
    解決方法:
    可以增加一個mutex互斥信號量來保證if判斷語句 和 count++(count–) 能夠“一氣呵成”執行完,中間不會被打斷,保證各進程對count的訪問是互斥的

  • 上述解決方案確實已經達到了多個讀進程可以同時訪問共享數據的目的,但此時,又出現了新的問題:只要又讀進程在讀取共享數據,寫進程就要一直阻塞等待,這很可能導致寫進程一直無法往共享數據中寫入數據,也就是說寫進程很有可能會被“餓死”。因此,這種算法中,讀進程是優先的!下面我們來解決寫進程可能會被“餓死”這個問題
    解決方法:
    設置變量semaphore w =1 ,用于實現“寫優先”。然后分別為讀進程、寫進程增加關于信號變量w的P、V操作。


    經過上面的“改造”,我們來驗證一下是否達到了“寫優先”的目的:
    讀進程A——>寫進程a——>讀進程B:
    假設讀進程A正在訪問共享數據,那么讀進程A肯定已經執行了P(w)、P(mutex)、P(rw)、V(mutex)、V(w)。此時,寫進程a也想要訪問共享數據,那么當讀進程a執行P(w)時,不會被阻塞,但是執行到P(rw)時,由于讀進程A還沒有執行V(rw)“解鎖”操作,所以,寫進程a會被阻塞等待
    而如果此時有第二個讀進程B也想要訪問共享數據,但由于之前第一個讀進程A已經執行了P(w)“上鎖”操作,所以當讀進程B執行到P(w)操作時,也會被堵塞等待
    直到讀進程A完成了讀文件操作后,執行了V(rw)“解鎖”操作,寫進程a才會被“喚醒”。然后在寫進程完成了寫文件操作后,執行了V(w)“解鎖”操作,讀進程B才能被喚醒
    注意:這里為什么會先喚醒寫進程a呢?
    答:因為這里是寫進程a比讀進程B先想要訪問共享數據,所以優先被喚醒。這里其實就是“先來先服務算法

  • 結論:
    在這種算法中,連續進入的多個讀進程,可以同時讀文件;寫進程和其他進程不能同時訪問文件;寫進程不會“饑餓”。但也并不是真正的“寫優先”,而是遵循相對公平的先來先服務原則。有的也稱這種算法為“讀寫公平法”。

    四、總結:

    讀者-寫者問題為我們解決復雜的互斥問題提供了一個參考思路:
    核心思想在于設置了一個計數器count用來記錄當前正在訪問共享文件的讀進程數。我們可以用count的值來判斷當前進入的進程是否是第一個/最后一個讀進程,從而做出不同的處理。如果是第一個進程則執行“上鎖”操作,如果是最后一個進程則執行“解鎖”操作。
    另外,對count變量的檢查和賦值不能一氣呵成導致了一些錯誤,如果需要實現“一氣呵成”,自然應該想到用互斥信號量
    最后,還要認真體會我們是如何解決“寫進程饑餓”問題的。
    絕大多數的PV操作大題都可以用之前介紹的幾種生產者-消費者問題的思想來解決,如果遇到更復雜的問題,可以想想能否用讀者寫者問題的這幾個思想來解決。

    總結

    以上是生活随笔為你收集整理的四、操作系统——读者写者问题(详解)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 91精品国产综合久久久久 | 手机在线看黄色 | 日本精品在线观看视频 | 成人3d动漫在线观看 | 免费污视频 | 亚洲人网站 | 人妻无码中文字幕免费视频蜜桃 | 香蕉网在线播放 | 亚洲精品一区二区三区婷婷月 | 久99热| 亚洲美女一区二区三区 | 91夜色视频 | 男女偷爱性视频刺激 | 黄视频免费看在线 | 国产日韩欧美激情 | 欧美狠狠 | 亚洲一区免费电影 | 涩涩视频网 | 吸咬奶头狂揉60分钟视频 | 中文在线观看视频 | 欧美,日韩,国产在线 | 成人免费版欧美州 | 91亚洲国产精品 | 中国毛片基地 | av一区二区三区在线观看 | 高清欧美性猛交xxxx | 婷婷射丁香 | 做爰视频毛片视频 | 日本www黄| 亚洲视频999 | 青青草网址| 日本三级一区 | 中文字幕3区 | 丰满岳乱妇国产精品一区 | 四虎影视在线播放 | freesex性hd公交车上 | 亚洲国产在| 激情影院内射美女 | 国产美女91 | 熟妇高潮喷沈阳45熟妇高潮喷 | 免费看欧美成人a片无码 | 男女国产精品 | 男男啪啪网站 | h小视频在线观看 | 国产激情啪啪 | 小视频在线播放 | 亚洲欧美激情在线 | 欧美精品一级 | 天堂久久一区 | 国产视频中文字幕 | 亚洲国产www | 美女裸体跪姿扒开屁股无内裤 | 大吊一区二区三区 | 欧美一级片在线看 | 日本视频在线 | 中文字幕制服丝袜 | 亚洲国产精品久久精品怡红院 | 国产日批| 欧美日韩色图 | 欧美夜夜爽 | 国产成人精品一区二区三 | av在线天堂网 | 操白虎逼 | 欧美性视频一区二区 | 九九热8| 色婷婷亚洲一区二区三区 | 亚洲国产日韩在线一区 | 精品久久久中文字幕 | 国产免费av片在线 | free性中国hd国语露脸 | 拔插拔插海外华人免费视频 | 国产黄在线观看 | 伊人网影院 | 美女高潮网站 | 日本性高潮视频 | 五十路av | 久久视频免费观看 | 欧美一级片网站 | 国产乱码一区二区三区 | 免费观看日韩毛片 | 欧美视频在线不卡 | 国产精品边吃奶边做爽 | 久久一区视频 | 国产伊人自拍 | 一级黄色大全 | 看av在线| 欧美一级一级一级 | 精品久久一二三区 | 国产一区二区三区视频免费在线观看 | 久久久久亚洲av无码专区体验 | 久久99精品久久久久久噜噜 | 能免费看18视频网站 | 日剧再来一次第十集 | 日韩美女中文字幕 | 日韩免| 精品人妻一区二区三区免费 | 日韩亚洲天堂 | 久久综合社区 | 国产操女人|