操作系統-PV

🧠 背景:為什么會有 PV?

類比:內存(生產者) 和 CPU(消費者)

  • 內存 / IO / 磁盤 / 網絡下載 → 不斷“生產數據”

    • 例如:讀取文件、下載視頻、從數據庫加載信息

  • CPU → 負責“消費數據”

    • 例如:處理數據、解碼、渲染畫面、計算結果

👉 由于生產和消費速度可能存在差異(如內存大、CPU處理慢),需要一個緩沖區(如緩存、隊列)進行協調。

🔧 三個基本模板

1. 信號量

  • 定義:表示當前可用資源的個數。

2. 同步:控制先后順序

  • 核心:信號量初始設為 0;V 操作釋放信號量,進程 B 才能有資源繼續執行。

  • 問題:如果信號量初始值為 0,進程 A 和進程 B 都會被阻塞嗎?

    • 回答:是的,這樣可以保證進程 A 和 B 的先后順序。

3. 互斥:保證一個進程對資源的訪問

  • 核心:使用 PV 操作夾住臨界區(臨界資源存放點)。

進程A;                 mutex=1
P(互斥信號量);        mutex--;   0;
臨界區;                
V(互斥信號量)          mutex++;   1;進程B;               
P(互斥信號量);      
臨界區;                
V(互斥信號量)       

🏭 生產者-消費者模型

? full 是什么意思?

  • 定義:在生產者-消費者模型中,full 是一個信號量,用來表示當前緩沖區中“已經存了多少個產品”,也可以理解為“可供消費者消費的數據數量”。

? mutex 是什么?

  • 定義mutex 是 mutual exclusion(互斥)的縮寫,表示一次只允許一個線程/進程訪問共享資源。用于保護臨界區。

🔄 同步與互斥關系

同步關系

  1. 生產者先生產出一個產品V(full),消費者才能消費一個產品 → P(full)

  2. 消費者從緩沖區取來產品V(empty),釋放一個空位,生產者才能繼續生產 → P(empty)

互斥關系

  • 使用 P(mutex) 加鎖緩沖區,V(mutex) 釋放緩沖區,確保緩沖區的互斥訪問。

? 常見問題解答

問題:緩沖區初始為空,empty = n(如 10 個空位),為什么還需要等待消費者“消費”后產生空位?不是一開始就很多空位了嗎?

  • 答案

    • ? 一開始當然不需要等消費者,可以直接放數據進去!

    • 🛑 但如果生產得太快,把緩沖區塞滿了(empty == 0),就必須等消費者先消費一個產品(釋放一個空位)才能繼續生產。

🧑?💻 生產者代碼解釋

  1. 生產:在自己線程內處理好數據(不影響別人)。

  2. P(empty):檢查是否有空位(資源控制)。

  3. P(mutex):進入緩沖區前加鎖(互斥控制)。

  4. 放入緩沖區

  5. V(mutex):解鎖。

  6. V(full):通知消費者“有東西可以用了”。

👩?💻 消費者代碼解釋

  1. P(full):等待是否有產品可取。

  2. P(mutex):加鎖,準備訪問緩沖區。

  3. 取產品:真正的“消費”動作。

  4. V(mutex):解鎖。

  5. V(empty):通知生產者釋放了一個空位。

  6. 消費:轉到自己的線程輸出數據。

讀者-寫者(互斥)

📖 讀者-寫者問題(互斥)

問題:為什么 mutex 需要夾住 count,不是允許多個讀者同時讀嗎?

  • 回答:是的,多個讀者可以同時讀,但是 count 是一個“全局變量”,多個線程同時修改它會出問題,所以必須用 mutex 來保護它!

🔄 同步與互斥關系

同步關系

  • 讀者讀完后,解鎖并將 count--。當 count 為 0 時,表示最后一個讀者離開,此時寫者可以開始寫。

  • 簡單來說:第一個讀者來關寫者的門,最后一個讀者來開寫者的門。

互斥關系:

互斥關系

  • count 的初始值為 0,表示沒有讀者在讀。

  • 如果有寫者正在寫,rw = 0,讀者會被阻塞,等待寫者寫完。

  • 如果沒有寫者寫,rw = 1,第一個讀者執行 P(rw),然后繼續執行。

? 常見問題解答

問題:如果第一個讀者還沒執行到 V(mutex),第二個讀者就進來了,會怎么樣?第二個還能繼續嗎?

  • 答案

    • ? 第二個讀者進不來,它會被阻塞在 P(mutex) 這里,直到第一個讀者執行 V(mutex),它才能繼續往下執行。

    • ? 雖然讀者可以“同時讀”,但它們更新計數器 count 時一定是串行的、有序的、安全的!

相對寫優先(有限)

設置P(w)V(w):

1:當讀進程先來時候,執行P(W),W=0,寫進程堵塞,只有當讀進程釋放了,寫進程才能進來。

2:當寫進程先來時候,執行P(W),W=0,讀進程堵塞,只有當寫進程釋放了,讀進程才能進來。

哲學家用餐(都會有幾率導致死鎖)

限制n-1哲學家就餐

使用信號量(semaphore count=4)限制同時就餐的哲學家數量為4個,理論上想避免所有5個哲學家同時拿筷子。但如果4個哲學家分別拿了一根筷子(例如,0號拿0筷子,1號拿1筷子,依此類推),第5個哲學家無法進入就餐,而已進入的4個哲學家仍在等待另一根筷子,依然會死鎖。

僅當左右筷子可用時候,才會吃飯。

使用mutex緊緊夾住拿筷子的動作

每個哲學家都先試圖拿左筷子(P(chopsticks[i])),再拿右筷子(P(chopsticks[(i+1)%5]))。如果所有哲學家同時拿左筷子,就會形成循環等待(每個人都拿著一根筷子,等待另一根),導致死鎖。

奇數號先拿左筷子。偶數號拿右筷子

哲學家編號為:1 ~ 5,筷子編號也為 1 ~ 5

每位哲學家要吃飯,必須拿 左手邊和右手邊的筷子

  • 哲學家 i 的左手筷子編號:i

  • 哲學家 i 的右手筷子編號: (i % 5) + 1

這里試圖通過讓一個哲學家(if(i%2==0))先拿左筷子,其他人先拿右筷子來打破對稱性。但如果所有哲學家同時進入循環,依然可能出現循環等待。例如,編號為偶數的哲學家拿左筷子,編號為奇數的拿右筷子,最終還是會形成死鎖。

ChatGPT鏈接:https://chatgpt.com/share/680274c9-faec-800c-8a90-253e36512386

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/76356.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76356.shtml
英文地址,請注明出處:http://en.pswp.cn/web/76356.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

工廠方法模式詳解及在自動駕駛場景代碼示例(c++代碼實現)

模式定義 工廠方法模式(Factory Method Pattern)是一種創建型設計模式,通過定義抽象工廠接口將對象創建過程延遲到子類實現,實現對象創建與使用的解耦。該模式特別適合需要動態擴展產品類型的場景。 自動駕駛感知場景分析 自動駕…

基于 S2SH 架構的企業車輛管理系統:設計、實現與應用

在企業運營中,車輛管理是一項重要工作。隨著企業規模的擴大,車輛數量增多,傳統管理方式效率低下,難以滿足企業需求。本文介紹的基于 S2SH 的企業車輛管理系統,借助現代化計算機技術,實現車輛、駕駛員和出車…

IntelliJ IDEA download JDK

IntelliJ IDEA download JDK 自動下載各個版本JDK,步驟 File - Project Structure (快捷鍵 Ctrl Shift Alt S) 如果下載失敗,換個下載站點吧。一般選擇Oracle版本,因為java被Oracle收購了 好了。 花里胡哨&#…

MCP協議在納米材料領域的深度應用:從跨尺度協同到智能研發范式重構

MCP協議在納米材料領域的深度應用:從跨尺度協同到智能研發范式重構 文章目錄 MCP協議在納米材料領域的深度應用:從跨尺度協同到智能研發范式重構一、MCP協議的技術演進與納米材料研究的適配性分析1.1 MCP協議的核心架構升級1.2 納米材料研發的核心挑戰與…

OpenAI發布GPT-4.1:開發者專屬模型的深度解析 [特殊字符]

最近OpenAI發布了GPT-4.1模型,卻讓不少人感到困惑。今天我們就來深入剖析這個新模型的關鍵信息! 重要前提:API專屬模型 💻 首先需要明確的是,GPT-4.1僅通過API提供,不會出現在聊天界面中。這是因為該模型主…

DemoGen:用于數據高效視覺運動策略學習的合成演示生成

25年2月來自清華、上海姚期智研究院和上海AI實驗室的論文“DemoGen: Synthetic Demonstration Generation for Data-Efficient Visuomotor Policy Learning”。 視覺運動策略在機器人操控中展現出巨大潛力,但通常需要大量人工采集的數據才能有效執行。驅動高數據需…

界面控件DevExpress WPF v25.1新功能預覽 - 文檔處理類功能升級

DevExpress WPF擁有120個控件和庫,將幫助您交付滿足甚至超出企業需求的高性能業務應用程序。通過DevExpress WPF能創建有著強大互動功能的XAML基礎應用程序,這些應用程序專注于當代客戶的需求和構建未來新一代支持觸摸的解決方案。 無論是Office辦公軟件…

Muduo網絡庫實現 [十六] - HttpServer模塊

目錄 設計思路 類的設計 模塊的實現 公有接口 私有接口 疑問點 設計思路 本模塊就是設計一個HttpServer模塊,提供便攜的搭建http協議的服務器的方法。那么這個模塊需要如何設計呢? 這還需要從Http請求說起。 首先從http請求的請求行開始分析&…

多模態記憶融合:基于LSTM的連續場景生成——突破AI視頻生成長度限制

一、技術背景與核心挑戰 2025年視頻生成領域面臨的關鍵難題是長時程連貫性——傳統方法在生成超過5分鐘視頻時會出現場景跳變、物理規則不一致等問題。本研究提出時空記憶融合架構(ST-MFA),通過LSTM記憶門控與多模態對齊技術,在R…

LabVIEW油氣井井下集成監測系統

LabVIEW平臺開發的油氣井井下集成監測系統通過實時監控油氣井的井下環境參數,如溫度、壓力和有害氣體含量,有效提高了油氣采收率并確保了作業安全。系統利用高精度傳感器和強大的數據處理能力,通過綜合監測和分析,實現了對油氣井環…

【python畫圖】:從入門到精通繪制完美柱狀圖

目錄 Python數據可視化:從入門到精通繪制完美柱狀圖一、基礎篇:快速繪制柱狀圖1.1 使用Matplotlib基礎繪制1.2 使用Pandas快速繪圖 二、進階篇:專業級柱狀圖定制2.1 多系列柱狀圖2.2 堆疊柱狀圖2.3 水平柱狀圖 三、專業參數速查表Matplotlib …

【 解決Cline插件無法激活及DeepSeek模型請求卡頓或者無法加載問題】

解決Cline插件無法激活及DeepSeek模型請求卡頓問題 問題描述 在VSCode中使用Cline插件時遇到以下問題: 插件長時間卡在"activating"激活狀態成功激活后發起DeepSeek對話時,API請求階段持續卡頓夜間時段問題出現頻率較低 環境信息 Cline版…

聊透多線程編程-線程互斥與同步-9.C# 線程互斥實現方式

目錄 1. 鎖機制 (Locking Mechanisms) (1) lock 關鍵字 (2) Monitor 類 2. 跨進程互斥機制 3. 信號量機制 (1) Semaphore 和 SemaphoreSlim 4. 讀寫鎖機制 (1) ReaderWriterLockSlim 5. 原子操作機制 (1) Interlocked 類 6. 自旋鎖機制 (1) SpinLock 線程互斥是一種…

eNSP無法啟動AR報錯碼40,而且按照eNSP幫助手冊排查都沒用,我的處理方法【自己存檔版】

問題: 已經嘗試過eNSP的幫助手冊,發現都沒用! eNSP啟動AR設備報錯碼40且常規排查無效時,可嘗試以下解決方案(按優先級排序): 1. 關閉Hyper-V和Windows沙盒(我是這個問題&#xff0…

秒殺系統解決兩個核心問題的思路方法總結:1.庫存超賣問題;2.用戶重復搶購問題。

秒殺系統解決兩個核心問題 秒殺系統解決兩個核心問題:一、解決庫存超賣的核心邏輯:解釋:原子性保證: 二、如何避免重復搶購:使用 Redis 做唯一標識判斷優點: 三、流程完整梳理:四、通過數據庫建…

【集成電路版圖設計學習筆記】3.基本電路元件(MOS,電容,電阻)

一、MOSFET 在版圖設計中,要定義一個mosfet,最關鍵的層次是polysilicon(多晶硅)和active(有源區)。用有源區定義了一個矩形的區域,在這個區域內才可以形成一個有源器件,然后再用多晶…

藍橋杯之差分題型

一維差分 問題描述 給定一個長度為 nn 的序列 aa。 再給定 mm 組操作,每次操作給定 33 個正整數 l,r,dl,r,d,表示對 al~ral~r? 中的所有數增加 dd。 最終輸出操作結束后的序列 aa。 Update:由于評測機過快,n,mn,m 于 2024…

深入剖析 C/S 與 B/S 架構及網絡通信基礎

目錄 C/S 架構詳解? 概念與示例? 優點? B/S 架構詳解? 概念與示例? 優勢? 缺點? C/S 與 B/S 的區別? 架構組成? 使用場景? 開發和維護? 安全性? 網絡通信基礎? IP 地址? MAC(物理地址)? 端口? 路由器? 網關? 子網掩…

常見免殺框架的使用(3款)---【AniYaGUI1.2.0、AV_Evasion_Tool掩日、FoxBypass_V1.0】

一、AniYaGUI1.2.0免殺框架 環境:虛擬機Win10 、云服務器 工具:Xshell、CobaltStrike 項目下載地址: https://github.com/piiperxyz/AniYa 1. 安裝Go語言環境 確保Win10虛擬機安裝 Golang 且環境變量中包含 go 否則?法編譯(注…

Apache HTTPD 換行解析漏洞

漏洞介紹 CVE-2017-15715 Apache HTTPD 是一個廣泛使用的 HTTP 服務器,可以通過 mod_php 模塊來運行 PHP 網頁。在其 2.4.0 到 2.4.29 版本中存在一個解析漏洞,當文件名以 1.php\x0A 結尾時,該文件會被按照 PHP 文件進行解析,這…