進程同步機制-信號量機制-記錄型信號量機制中的的wait和signal操作

waitsignal是記錄型信號量機制中用于實現進程同步與互斥的兩個重要操作,

wait 操作

wait(semaphores *S) {S->value --;if (S->value<0) block(S->list)
}
  • 請求資源S->value --;?這一步表示進程請求一個單位的資源,將信號量?S?的?value?值減 1 。比如信號量原本表示有 3 個空閑資源(value?為 3 ) ,執行這一步后,就表示剩余 2 個空閑資源 。
  • 判斷與阻塞if (S->value<0) block(S->list)?,在資源數量減少后,判斷?value?值是否小于 0 。如果?value?小于 0 ,說明當前沒有足夠的空閑資源供進程使用 。此時,block(S->list)?操作會將該進程阻塞,并把進程放入信號量?S?的等待隊列?list?中 。例如,value?初始為 1 ,有兩個進程先后執行?wait?操作,第一個進程執行后?value?變為 0 ,還能獲取資源;第二個進程執行后?value?變為 -1 ,就會被阻塞放入等待隊列 。
  • block方法:作用是將調用它的進程掛起,使其從運行態進入阻塞態 。在?wait?操作中,當信號量?S->value?小于 0 ,意味著沒有足夠資源,此時調用?block(S->list)?,把該進程添加到信號量?S?的等待隊列?list?里 ,讓其等待資源可用 。比如餐廳沒座位了,顧客就得在候座區排隊等待 。

signal 操作

signal(semaphores *S) {S->value++;if (S->value<=0) wakeup(S->list);
}
  • 釋放資源S->value++;?表示進程釋放一個單位的資源,將信號量?S?的?value?值加 1 。假設信號量?value?原本為 -2 (表示有 2 個進程在等待資源 ) ,執行這一步后,value?變為 -1 ,代表還有 1 個進程在等待,但資源數量增加了 。
  • 喚醒進程if (S->value<=0) wakeup(S->list);?,在資源數量增加后,判斷?value?值是否小于等于 0 。如果?value?小于等于 0 ,說明等待隊列中還有進程在等待資源 ,wakeup(S->list)?操作會從等待隊列?list?中喚醒一個進程 ,讓其有機會重新獲取資源并繼續執行 。比如?value?為 -1 時,執行此操作就會喚醒一個等待的進程 。
  • wakeup方法:功能是喚醒處于阻塞態的進程 。在?signal?操作里,當信號量?S->value?加 1 后小于等于 0 ,表明等待隊列有進程在等資源,執行?wakeup(S->list)?,從等待隊列中喚醒一個進程 ,讓其從阻塞態變為就緒態 ,獲得再次競爭 CPU 執行的機會 。就像餐廳有座位空出來,服務員從候座區叫一位顧客去就餐 。

總體而言,waitsignal操作通過對信號量?value?值的增減以及對等待隊列中進程的阻塞和喚醒,實現了對資源的合理分配與管理,保障了進程間的同步與互斥 。

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

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

相關文章

sd webui 安裝sd-webui-TemporalKit 加載報錯解決辦法

ModuleNotFoundError: No module named moviepy.editer 報錯內容類似上面截圖&#xff0c;我的已經解決&#xff0c;暫時無法截圖了 處理方法&#xff1a; 重點說明&#xff1a;插件目錄必須是TemporalKit&#xff0c;不能更改 進入到安裝目錄&#xff1a;extensions\Tempor…

decimal.js庫處理js浮點數精度誤差問題

1、經常遇到前端計算金額的時候出現精度誤差問題&#xff0c;導致前后端計算的金額不一致導致校驗過不去的情況&#xff0c;相信有不少人寫過Math.floor(e*100)/100來實現保留2位小數&#xff0c;但是這么寫就會出現上面的精度問題。怎么解決呢&#xff1f;這里使用的是decimal…

如何將 WSL 的 Ubuntu-24.04 遷移到其他電腦

在使用 Windows Subsystem for Linux (WSL) 時&#xff0c;我們可能會遇到需要將現有的 WSL 環境遷移到其他電腦的情況。無論是為了備份、更換設備&#xff0c;還是在不同電腦之間共享開發環境&#xff0c;掌握遷移 WSL 子系統的方法都是非常有用的。本文將以 Ubuntu-24.04 為例…

RISCV——內核及匯編

RISCV——內核及匯編 小狼http://blog.csdn.net/xiaolangyangyang 1、寄存器組&#xff08;ABI&#xff09; 2、異常及中斷 XV6 trap&#xff08;二&#xff09;RISCV中斷異常處理/定時器中斷 mie&#xff1a;中斷開關mip&#xff1a;中斷狀態mstatus.mie&#xff1a;全局中斷…

算法日記32:埃式篩、gcd和lcm、快速冪、乘法逆元

一、埃式篩&#xff08;計算質數&#xff09; 1.1、概念 1.1.1、在傳統的計算質數中&#xff0c;我們采用單點判斷&#xff0c;即判斷(2~sqrt(n))是否存在不合法元素&#xff0c;若存在則判否&#xff0c;否則判是 1.1.2、假設&#xff0c;此時我們需要求1~1000的所有質數&am…

使用 mysqldump 獲取 MySQL 表的完整創建 DDL

要獲取 MySQL 中某個表的完整創建 DDL&#xff08;僅結構&#xff0c;不含數據&#xff09;&#xff0c;可以使用 mysqldump 工具的以下命令&#xff1a; 基本命令格式 bash mysqldump -h [主機名] -u [用戶名] -p --no-data --single-transaction --routines --triggers --…

Debian 系統 Python 開發全解析:從環境搭建到項目實戰

Debian 系統 Python 開發全解析:從環境搭建到項目實戰 在當今數字化時代,Python 憑借其簡潔易讀的語法和強大的功能,成為了最受歡迎的編程語言之一。Debian 作為一款穩定、安全且開源的 Linux 操作系統,為 Python 開發提供了理想的環境。本文將詳細介紹在 Debian 系統上進…

實時技術對比:SSE vs WebSocket vs Long Polling

早期網站僅展示靜態內容&#xff0c;而如今我們更期望&#xff1a;實時更新、即時聊天、通知推送和動態儀表盤。 那么要如何實現實時的用戶體驗呢&#xff1f;三大經典技術各顯神通&#xff1a; ? SSE&#xff08;Server-Sent Events&#xff09;&#xff1a;輕量級單向數據…

【前端】es6新特性全解

第一章 簡介 1.1 ES6概述 1.1.1 ES6定義與發展歷程 1. ES6 定義 ES6 全稱 ECMAScript 6.0&#xff0c;它是 JavaScript 語言的下一代標準&#xff0c;對 JavaScript 語言進行了許多增強和擴展&#xff0c;帶來了更簡潔、更強大的語法特性。可以把 ES6 想象成是 JavaScript …

nlp中的頻率就是權重嗎

&#x1f522; 一、“頻率”是什么&#xff1f; 在 NLP 中&#xff0c;**詞頻&#xff08;frequency&#xff09;**通常指的是&#xff1a; 某個單詞或 token 在語料庫中出現的次數&#xff08;或比例&#xff09; 舉例&#xff1a; "The cat sat on the mat. The cat i…

多模態大語言模型arxiv論文略讀(九十八)

Accelerating Pre-training of Multimodal LLMs via Chain-of-Sight ?? 論文標題&#xff1a;Accelerating Pre-training of Multimodal LLMs via Chain-of-Sight ?? 論文作者&#xff1a;Ziyuan Huang, Kaixiang Ji, Biao Gong, Zhiwu Qing, Qinglong Zhang, Kecheng Zhe…

WEB安全--RCE--webshell HIDS bypass4

繼WEB安全--RCE--webshell HIDS bypass3的補充&#xff1a; 十三、時間開關 webshell&#xff1a; <?php ini_set("display_errors",1); function foo($test, $bar FSYSTEM) {echo $test . $bar; } $function new ReflectionFunction(foo); $q new ParseEr…

.NET 7 AOT 使用及 .NET 與 Go 語言互操作詳解

.NET 7 AOT 使用及 .NET 與 Go 語言互操作詳解 目錄 .NET 7 AOT 使用及 .NET 與 Go 語言互操作詳解 一、背景與技術概述 1.1 AOT 編譯技術簡介 1.2 Go 語言與 .NET 的互補性 二、.NET 7 AOT 編譯實踐 2.1 環境準備 2.2 創建 AOT 項目 2.3 AOT 編譯流程 2.4 調試信息處…

機器人--里程計

教程 輪式里程計視頻講解 里程計分類 ros--odometry 什么是里程計 里程計是一種利用從移動傳感器獲得的數據來估計物體位置隨時間的變化而改變的方法。該方法被用在許多機器人系統來估計機器人相對于初始位置移動的距離。 注意&#xff1a;里程計是一套算法&#xff0c;不…

云原生時代 Kafka 深度實踐:02快速上手與環境搭建

2.1 本地開發環境搭建 單機模式安裝 下載與解壓&#xff1a;前往Apache Kafka 官網&#xff0c;下載最新穩定版本的 Kafka 二進制包&#xff08;如kafka_2.13-3.6.0.tgz&#xff0c;其中2.13為 Scala 版本&#xff09;。解壓到本地目錄&#xff0c;例如/opt/kafka&#xff1a…

Vue Hook Store 設計模式最佳實踐指南

Vue Hook Store 設計模式最佳實踐指南 一、引言 在 Vue 3 組合式 API 與 TypeScript 普及的背景下&#xff0c;Hook Store 設計模式應運而生&#xff0c;它結合了 Vue 組合式 API 的靈活性與狀態管理的最佳實踐&#xff0c;為開發者提供了一種輕量級、可測試且易于維護的狀態…

無人機多人協同控制技術解析

一、運行方式 無人機多人點對點控制通常采用以下兩種模式&#xff1a; 1. 主從控制模式 指定一個主控用戶擁有最高優先級&#xff0c;負責飛行路徑規劃、緊急操作等關鍵指令&#xff1b;其他用戶作為觀察者&#xff0c;僅能查看實時畫面或提交輔助指令&#xff0c;需經主…

樹型表查詢方法 —— SQL遞歸

目錄 引言&#xff1a; 自鏈接查詢&#xff1a; 遞歸查詢&#xff1a; 編寫service接口實現&#xff1a; 引言&#xff1a; 看下圖&#xff0c;這是 course_category 課程分類表的結構&#xff1a; 這張表是一個樹型結構&#xff0c;通過父結點id將各元素組成一個樹。 我…

微服務難題?Nacos服務發現來救場

文章目錄 前言1.什么是服務發現2.Nacos 閃亮登場2.1 服務注冊2.2 服務發現 3.Nacos 的優勢3.1 簡單易用3.2 高可用3.3 動態配置 4.實戰演練4.1安裝 Nacos4.2 服務注冊與發現示例代碼&#xff08;以 Spring Boot 為例&#xff09; 總結 前言 大家好&#xff0c;我是沛哥兒。今天…

AStar低代碼平臺-腳本調用C#方法

修改報工表表單&#xff0c;右鍵定義彈出菜單&#xff0c;新增一個菜單項&#xff0c;并在點擊事件腳本中編寫調用腳本。 編譯腳本&#xff0c;然后在模塊代碼里面定義這個方法&#xff1a; public async Task<int> on_call_import(DataRow curRow) {PrintDataRow(cur…