【Linux】:消息隊列和信號量

消息隊列和信號量

  • 一.消息隊列
    • 1.原理
    • 2.消息隊列的各種接口
      • 1.創建消息隊列
      • 2.釋放消息隊列
      • 3.發送和接收信息
  • 二.信號
    • 1.概念
    • 2.各種接口
      • 1.創建信號量
      • 2.銷毀信號量
      • 3.對信號量進行操作
  • 三.一個現象

一.消息隊列

1.原理

在這里插入圖片描述

這種消息隊列被稱為system V標準。

可以使用ipcs -q來查詢消息隊列,用ipcrm -q+msqid來刪除消息隊列。

2.消息隊列的各種接口

1.創建消息隊列

在這里插入圖片描述

第一個參數

在這里插入圖片描述

第二個參數

在這里插入圖片描述

2.釋放消息隊列

在這里插入圖片描述

第一個參數:就是msgget的返回值(隊列的唯一標識符)

第二個參數:要進行什么操作。(有許多參數可以自行查看,這里使用 IPC_RMID刪除該隊列)

第三個參數:各種隊列的的屬性。

3.發送和接收信息

發送消息

在這里插入圖片描述

第一個參數:隊列的唯一標識符。

第二個參數:數據塊的起始地址。

在這里插入圖片描述

第三個參數:數據塊的大小。

第四個參數

在這里插入圖片描述

接收消息

在這里插入圖片描述

前三個和第五個參數與讀一致。

第四個參數:讀取數據的類型。

二.信號

1.概念

在這里插入圖片描述

解釋一個現象:多進程,多并發打印時會屏幕出現錯亂,命令行重疊…就是因為屏幕也是文件,沒有進行互斥保護。

理解信號量(信號燈)

信號量(燈)的本質就是一個計數器。描述臨界資源的資源數。

在這里插入圖片描述

如果一個臨界資源只能由一個執行流訪問,像這種只有0,1兩態的計數器稱為二元信號量–本質就是一個鎖!

PV操作

申請信號量,簡單來說就是對計數器減減——P操作。 釋放信號量,簡單來說就是對計數器加加——V操作。
申請和釋放的PV操作——原子的(要么不做,要么就做完,沒有正在做的概念)。

2.各種接口

1.創建信號量

在這里插入圖片描述

第一個參數:key值可以參考共享內存和消息隊列的key值,就不再過多描述。

第二個參數:要創建信號的數量。

第三個參數:也參考共享內存和消息隊列的flg。

返回信號量的唯一標識符。

2.銷毀信號量

在這里插入圖片描述

第一個參數:信號量標識符。

第二個參數:信號量個數。

第三個參數:可以傳各種控制操作(傳IPC_RMID表示刪除)。

3.對信號量進行操作

在這里插入圖片描述

第一個參數:信號量唯一標識符。
第二個參數:需要自定義一個sembuf類型的結構體,里面要包含操作哪一個信號量,信號量的操作(1代表實現V操作,-1代表實現P操作)

在這里插入圖片描述

三.一個現象

不論是之前的共享內存,還是消息隊列,還是信號量…這些systemV類型通信方式,它都會先進行組織,也就是建立對應屬性的結構體。

共享內存

在這里插入圖片描述

消息隊列

在這里插入圖片描述

信號量

在這里插入圖片描述

這些結構體的第一個參數都是struct ipc_perm類型。操作系統統一將這一類的結構體的地址存放在struct ipc_permarr[]數組里。所以如果我們需要對資源進行增刪查改就轉化成了對該數組進行增刪查改。

在這里插入圖片描述

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

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

相關文章

分頁符 分頁

【插入】---【分頁符】 目錄和一級標題得新起一頁

【React-Router】路由快速上手

1. 創建路由開發環境 # 使用CRA創建項目 npm create-react-app react-router-pro# 安裝最新的ReactRouter包 npm i react-router-dom2. 快速開始 // index.jsimport React from react; import ReactDOM from react-dom/client; import ./index.css; import App from ./App; i…

QEMU Guest Agent本地提權漏洞處理(CVE-2023-0664)

一、漏洞描述 QEMU Guest Agent(qga)類似于vmware中的 vmtools,相關安全報告顯示它的Windows版本安裝程序存在本地提權高危漏洞(CVE-2023-0664),攻擊者可利用該漏洞進行本地權限提升,獲得SYSTE…

音視頻5、libavformat-1

libavformat庫,是FFmpeg中用于處理各種媒體容器格式(media container format)的庫。它的兩個最主要的功能是 : demuxing:解封裝,將一個媒體文件分割為多個多媒體流 muxing:封裝,將多個多媒體數據流寫入到指定媒體容器格式的文件中 這兩個過程所做的…

智能化學習打破資源障礙 成為英語學習新趨勢

智能化學習是一種基于互聯網和人工智能技術的學習行為,通過網絡,學習者可以隨時隨地進行學習,真正打破了時間和空間的限制。與傳統線下學習方式相比,智能化學習更加方便、資源更加豐富,使海量英語學習資源唾手可得,智能化學習正逐漸成為中國孩子習得英語的重要方式。 隨著全球…

基于python和django旅游管理系統

基于python和django旅游管理系統 摘要 基于Python和Django的旅游管理系統是一個以現代化技術為基礎的系統,旨在提升旅游行業的管理效率和服務水平。該系統以Django框架為核心,結合Python編程語言的靈活性和強大的生態系統,實現了多方面的功能…

vue3之echarts漸變柱狀圖

vue3之echarts漸變柱狀圖 效果&#xff1a; 核心代碼&#xff1a; <template><div class"abnormal"><div class"chart" ref"chartsRef"></div></div> </template><script setup> import * as echa…

新手小白想做跨境電商,應該選第三方平臺還是獨立站?

近幾年在疫情的影響下&#xff0c;電商特有的“免接觸”模式迅速切中消費者的心理痛點&#xff0c;加上國內電商發展已經趨于平緩&#xff0c;很多線下店鋪被迫關閉&#xff0c;這也使得越來越多的大賣和平臺也不約而同布局跨境電商。而說到跨境電商&#xff0c;或許大家普遍想…

論文閱讀:MedSegDiff: Medical Image Segmentation with Diffusion Probabilistic Model

論文標題&#xff1a; MedSegDiff: Medical Image Segmentation with Diffusion Probabilistic Model 翻譯&#xff1a; MedSegDiff&#xff1a;基于擴散概率模型的醫學圖像分割 名詞解釋&#xff1a; 高頻分量&#xff08;高頻信號&#xff09;對應著圖像變化劇烈的部分&…

視頻剪輯達人分享:高效減片頭時長并調整播放速度的技巧,提升視頻品質

在視頻剪輯的過程中&#xff0c;許多初學者經常會遇到一些問題&#xff0c;如片頭過長、播放速度不適當等&#xff0c;這些問題不僅會影響觀眾的觀看體驗&#xff0c;還會對視頻品質產生負面影響。在調整播放速度時&#xff0c;要根據視頻內容來進行調整。一般來說&#xff0c;…

探索穩定擴散技術中的LoRA權重激活:從模型微調到動漫風格圖像生成的全過程

多重LoRA權重激發穩定擴散 穩定擴散控制網絡流水線步驟1&#xff1a;環境準備步驟2&#xff1a;模型轉換步驟3&#xff1a;運行時流水線測試 啟用穩定擴散的LoRA權重步驟4-1&#xff1a;通過pytorch_lora_weights.bin啟用LoRA步驟4-2&#xff1a;通過safetensors類型的權重啟用…

008 OpenCV matchTemplate 模板匹配

目錄 一、環境 二、模板匹配算法原理 三、代碼演示 一、環境 本文使用環境為&#xff1a; Windows10Python 3.9.17opencv-python 4.8.0.74 二、模板匹配算法原理 cv.matchTemplate是OpenCV庫中的一個函數&#xff0c;用于在圖像中查找與模板匹配的特征。它的主要應用場景…

leetcode:645. 錯誤的集合(python3解法)

難度&#xff1a;簡單 集合 s 包含從 1 到 n 的整數。不幸的是&#xff0c;因為數據錯誤&#xff0c;導致集合里面某一個數字復制了成了集合里面的另外一個數字的值&#xff0c;導致集合 丟失了一個數字 并且 有一個數字重復 。 給定一個數組 nums 代表了集合 S 發生錯誤后的結…

創建 Plotly 的散點線圖

一 使用 Plotly 畫圖 import plotly.graph_objects as godef img_show_fig(out_data_today):# 創建 Plotly 的散點線圖fig go.Figure()# 添加散點線fig.add_trace(go.Scatter(xout_data_today.index,yout_data_today.values,modelinesmarkers,markerdict(colorred, # 設置數…

揭秘周杰倫《最偉大的作品》MV,絕美UI配色方案竟然藏在這里

色彩在UI設計的基本框架中占據著舉足輕重的位置。實際上&#xff0c;精心挑選和組合的色彩配色&#xff0c;往往就是UI設計成功的不二法門。在打造出一個實用的UI配色方案過程中&#xff0c;我們需要有堅實的色彩理論知識&#xff0c;同時還需要擅于從生活中觀察和提取靈感。以…

uboot中nfs和tftp方式獲取文件

NFS文件系統掛載 服務器端配置如下 1.Server端需要安裝NFS服務&#xff1a; sudo apt-get install nfs-kernel-server2.創建需要掛載的路徑&#xff1a; mkdir -p /home/workspace/mercury/nfs_path3.創建共享目錄&#xff1a; ①vim /etc/exports ②在文件中添加&#xff…

Java 中 HashSet 和 TreeSet 的區別

簡介&#xff1a; 在Java開發中&#xff0c;HashSet和TreeSet都是常用的集合類&#xff0c;用于存儲不重復的元素。雖然它們都實現了Set接口&#xff0c;并提供了相似的功能&#xff0c;但在內部實現和特性上存在一些區別。本文將深入探討HashSet和TreeSet的差異&#xff0c;幫…

人機交互模塊的發展

人機交互&#xff08;Human-Computer Interaction&#xff0c;HCI&#xff09;是指人與計算機之間進行交互和信息交換的過程。人機交互模塊的發展經歷了多個階段&#xff0c;從早期的命令行界面到現在多樣化的交互方式&#xff0c;不斷發展和創新。以下是一些人機交互模塊的發展…

藍橋杯物聯網競賽_STM32L071_2_繼電器控制

CubeMX配置&#xff1a; Function.c及Function.h&#xff1a; #include "Function.h" #include "gpio.h" void Function_LD5_ON(void){HAL_GPIO_WritePin(LD5_GPIO_Port, LD5_Pin, GPIO_PIN_RESET); }void Function_LD5_OFF(void){HAL_GPIO_WritePin(LD5_…