信号量的使用和注意事项

大家好,今天给大家介绍信号量的使用和注意事项,文章末尾附有分享大家一个资料包,差不多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.mzph.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;可能有些地方探测到升级更新的时间略…