信號量的使用和注意事項

大家好,今天給大家介紹信號量的使用和注意事項,文章末尾附有分享大家一個資料包,差不多150多G。里面學習內容、面經、項目都比較新也比較全!可進群免費領取。
信號燈(信號量)集

POSIX?線程中的同步用的是無名信號量

進程間的同步使用的是IPC?對象[信號燈集]

信號燈集:信號燈集合,每一個信號燈都可以用來表示一類資源,其值表示資源的個數

(1)創建信號燈集

int?semget(key_t?key,?int?nsems,?int?semflg);

參數:

@key?IPC_PRIVATE?,?ftok()

@nsems?信號燈集中信號燈的個數

@semflg?IPC_CREAT?|?0666,IPC_CREAT?|?IPC_EXCL

返回值:

成功返回ID,失敗返回-1

(2)初始化信號燈集中信號燈的值

int?semctl(int?semid,?int?semnum,?int?cmd,?...);

參數:

@semid?信號燈集的ID

@semnum?信號燈的編號[編號從0開始]

@cmd?SETVAL[設置信號燈的值]?,GETVAL(獲取信號燈的值),IPC_RMID[刪除信號燈集]

返回值:

成功返回0,失敗返回-1

思考:將信號燈集中的1號信號燈初始化為1?

union?semun?{

int?val;?/*?Value?for?SETVAL?*/

struct?semid_ds?*buf;?/*?Buffer?for?IPC_STAT,?IPC_SET?*/

unsigned?short?*array;?/*?Array?for?GETALL,?SETALL?*/

struct?seminfo?*__buf;?/*?Buffer?for?IPC_INFO

(Linux-specific)?*/

};

void?init_sem_value(int?sem_id,int?sem_num,int?value)

{

union?semun?sem_val;

sem_val.val?=?value;

if(semctl(sem_id,sem_num,SETVAL,sem_val)?<?0)

{

...

}

return?;

}

(3)PV操作

int?semop(int?semid,?struct?sembuf?*sops,?unsigned?nsops);

功能:完成PV操作

參數:

@semid?信號燈集的ID

@sops?操作方式結構體首地址

@nsops?操作信號燈的個數

返回值:

成功返回0,失敗返回-1

struct?sembuf

{

unsigned?short?sem_num;?/*?semaphore?number?*/

short?sem_op;?/*?semaphore?operation?*/

short?sem_flg;?/*?operation?flags?*/

};

sem_op?:

<1>0?等待信號燈的值變成0

<2>1?釋放資源,V操作

<3>-1?申請資源,P操作

sem_flg:

0?:?阻塞方式

IPC_NOWAIT?:?非阻塞方式調用

SEM_UNDO?:?進程結束的時候,它申請的資源自動釋放

void?P(int?sem_id,int?sem_num)

{

struct?sembuf?sem;

sem.sem_num?=?sem_num;

sem.sem_op?=?-1;

sem.sem_flg?=?0;

if(semop(sem_id,&sem,1)?<?0)

{

....

}

}

void?V(int?sem_id,int?sem_num)

{

struct?sembuf?sem;

sem.sem_num?=?sem_num;

sem.sem_op?=?1;

sem.sem_flg?=?0;

if(semop(sem_id,&sem,1)?<?0)

{

....

}

}

練習:A,B通過信號燈集同步對共享內存操作

讓創建信號燈集的進程,初始化信號燈的值?,如果信號燈集已經存在則不初始化

sem_id?=?semget(key,2,IPC_CREAT?|?IPC_EXCL?|?0666);

if(sem_id?<?0)//信號燈集已經,不初始化信號燈值

{

sem_id?=?semget(key,2,IPC_CREAT?|?0666);

}else{

//初始化信號燈集中信號燈的值

}

嵌入式物聯網需要學的東西真的非常多,千萬不要學錯了路線和內容,導致工資要不上去!

無償分享大家一個資料包,差不多150多G。里面學習內容、面經、項目都比較新也比較全!某魚上買估計至少要好幾十。

(點擊找小助理0元領取)掃碼進群領資料icon-default.png?t=N7T8https://s.pdb2.com/pages/20230519/16QijNiGb32IFIn.html

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

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

相關文章

喬拓云平臺:微信小程序開發的全新視角與高效路徑

隨著微信小程序的日益普及&#xff0c;越來越多的人開始關注如何開發自己的小程序。對于沒有開發經驗的人來說&#xff0c;借助第三方平臺如喬拓云&#xff0c;可以輕松實現小程序的開發。本文將介紹微信小程序開發需要學習的東西&#xff0c;并探討如何借助喬拓云平臺進行無經…

基于深度學習的鋼鐵缺陷檢測系統(含UI界面,Python代碼,數據集、yolov8)

項目介紹 項目中所用到的算法模型和數據集等信息如下&#xff1a; 算法模型&#xff1a; ? ? yolov8 yolov8主要包含以下幾種創新&#xff1a; ? ? ? ? 1. 添加注意力機制&#xff08;SE、CBAM等&#xff09; ? ? ? ? 2. 修改可變形卷積&#xff08;DySnake-主干c…

【改進YOLOv8】融合可變形大核注意力D-LKA-Attention的油氣管道設備泄露檢測系統

1.研究背景與意義 項目參考AAAI Association for the Advancement of Artificial Intelligence 研究背景與意義 隨著油氣管道設備的廣泛應用&#xff0c;油氣泄露問題已經成為一個嚴重的環境和安全隱患。油氣泄露不僅會造成環境污染&#xff0c;還可能引發火災、爆炸等嚴重事…

掌握vue中國際化使用及配置

文章目錄 &#x1f341;i18n組件安裝&#x1f341;項目中配置 vue-i18n&#x1f341;編寫語言包&#x1f341;國際化的使用 隨著互聯網的普及和全球化的發展&#xff0c;開發國際化的應用程序已經成為一種趨勢。因此&#xff0c;將 VUE 應用程序國際化是非常有必要的。 以下是…

新時代商業旨意:傳統商家如何變革?

隨著新時代的到來&#xff0c;商業環境也在不斷變化。在這個信息爆炸、消費者需求日益復雜化的時代&#xff0c;商業旨意已經不再僅僅是追求利潤&#xff0c;而是轉向了以客戶為中心&#xff0c;追求價值共創、社會責任等多元化的目標。傳統商家面臨著諸多挑戰&#xff0c;如何…

2023四川大學“騰訊杯”新生賽(同步賽)糖果(鴿巢原理)

這個數據范圍, n 是 1 e 6 &#xff0c; a i 也是 1 e 6 n是1e6&#xff0c;a_i也是1e6 n是1e6&#xff0c;ai?也是1e6&#xff0c;任意 a i a j ∈ [ 0 , 2 e 6 ] a_ia_j \in [0, 2e6] ai?aj?∈[0,2e6]&#xff0c;所以如果有答案我們最多枚舉 2 e 6 2e6 2e6個數就可以找到…

視頻剪輯高手揭秘:如何批量減少時長并調整播放速度,提升視頻效果

隨著社交媒體的興起&#xff0c;視頻制作的需求越來越大。然而往往視頻文件存在一些問題&#xff0c;例如時長過長&#xff0c;或者要調整播放速度以更好地傳達信息。這些問題不僅影響了視頻的觀看體驗&#xff0c;也可能導致視頻難以在社交媒體上獲得廣泛的傳播。那么&#xf…

Android Canvas 改變背景顏色

我有一個有兩個 View 的應用 <com.myexample.ui.view.BackgroundView android:id"id/id_draw_canvas_classroom" android:layout_width"fill_parent" android:layout_height"fill_parent" android:layout_marginBottom"3dp" andro…

[EFI]Atermiter X99 Turbo D4 E5-2630v3電腦 Hackintosh 黑蘋果efi引導文件

硬件型號驅動情況主板 Atermiter X99 Turbo D4 處理器 Intel Xeon E5-2630v3 已驅動內存Desktop DDR4 2666 MHz已驅動硬盤Netac NV7000已驅動顯卡AMD Radeon RX 5700xt已驅動聲卡瑞昱 英特爾 High Definition Audio 控制器ALC897已驅動網卡LucyRTL8125已驅動無線網卡藍牙Broad…

基于Java個人作品管理系統

基于Java個人作品管理系統 功能需求 1、作品上傳&#xff1a;系統允許用戶上傳各種類型的作品&#xff0c;如文字、圖片、音頻、視頻等。上傳過程應簡單明了&#xff0c;支持批量上傳。 2、作品分類&#xff1a;系統需要提供作品分類功能&#xff0c;用戶可以根據自己的需求…

CNN,DNN,RNN,GAN,RL+圖像處理常規算法(未完待續)

好的&#xff0c;讓我們先介紹一些常見的神經網絡模型&#xff0c;然后再討論圖像處理的常規算法。 神經網絡模型&#xff1a; 1. CNN&#xff08;卷積神經網絡&#xff09; 原理&#xff1a; CNN主要用于處理圖像數據。它包含卷積層、池化層和全連接層。卷積層通過卷積操作…

文件夾重命名:提升工作效率,使用關鍵詞替換法重命名文件夾

在日常生活和工作中&#xff0c;經常要處理大量的文件夾和文件。有時候&#xff0c;為了更好地管理和查找文件&#xff0c;要給文件夾重新命名。但是&#xff0c;重命名文件夾并不是一件容易的事情&#xff0c;尤其是當文件夾數量眾多時。一個一個修改耗費極大的時間和精力&…

《C++新經典設計模式》之第19章 職責鏈模式

《C新經典設計模式》之第19章 職責鏈模式 職責鏈模式.cpp 職責鏈模式.cpp #include <iostream> #include <memory> #include <string> using namespace std;// 請求傳遞給鏈中的若干對象&#xff0c;哪個對象適合處理就自行處理 // 使多個對象都有機會處理請…

后端返回base64文件前端如何下載

1.后端返回base64格式文件 2.前端代碼 <style lang"less" scoped> import "./style/common.less";.table-div-a {color: #409EFF;text-decoration: underline;cursor: pointer; } </style><template><div class"template-con…

一文搞懂什么是Hadoop

Hadoop概念 什么是Hadoop Hadoop是一個由Apache基金會所開發的用于解決海量數據的存儲及分析計算問題的分布式系統基礎架構。 廣義上來說&#xff0c;Hadoop通常指一個跟廣泛的概念——Hadoop生態圈。 以下是hadoop生態圈中的技術&#xff1a; Hadoop優勢 hadoop組成 HDFS…

一個不錯的文章偽原創系統程序源碼

一款文章偽原創系統程序源碼免費分享&#xff0c;程序是站長原創的。 一共花了站長幾天時間寫的這個文章偽原創平臺&#xff0c;程序無需數據庫。 程序前端采用BootStrap框架搭建&#xff0c;后端采用PHP原生書寫。 前端偽原創采用Ajax無刷新提交&#xff0c;Ajax轉換到詞庫…

TCPUDP使用場景討論

將鏈路從TCP改為UDP會對通信鏈路產生以下影響和注意事項&#xff1a; 可靠性&#xff1a;UDP是無連接的協議&#xff0c;與TCP相比&#xff0c;它不提供可靠性保證和重傳機制。因此&#xff0c;當將鏈路從TCP改為UDP時&#xff0c;通信的可靠性會降低。如果在通信過程中丟失了U…

【爬取二手車并將數據保存在數據庫中】

爬取二手車并將數據保存在數據庫中 查看網頁結構分析爬取步驟解密加密信息將密文解密代碼&#xff1a; 進行爬取&#xff1a;爬取函數寫入解密文件函數和獲取城市函數解密文件&#xff0c;返回正確字符串函數保存到數據庫 運行結果 查看網頁結構分析爬取步驟 可以看出網頁使用…

C 語言 變量

變量初始值 全局變量&#xff1a;初始值是 0 局部變量&#xff1a;初始值是 隨機的 類型限定符 通常不需要顯式使用 register 關鍵字來優化變量的存儲和訪問。 關鍵字 _Complex和_Imaginary分別用于表示復數和虛數&#xff08;二者皆是數學概念&#xff09; 變量的聲明和定義 c…

蘋果 macOS 14.1.2 正式發布 更新了哪些內容?

蘋果今日向 Mac 電腦用戶推送了 macOS 14.1.2 更新&#xff08;內部版本號&#xff1a;23B92 | 23B2091&#xff09;&#xff0c;本次更新距離上次發布隔了 28 天。 需要注意的是&#xff0c;因蘋果各區域節點服務器配置緩存問題&#xff0c;可能有些地方探測到升級更新的時間略…