详解sem信号量在C++并发编程之线程同步中的应用

embedded/2024/9/19 0:53:53/ 标签: c++, 开发语言, linux, 个人开发

sem_t

信号量是一种变量,其访问是原子操作(不可中断的一个或者一系列操作, 运行期间不会有任何的上下文切换)的,其头文件为:
#include <semaphore.h>
其主要作用如下:
1、等待信号量,当信号量是0的时候,程序阻塞等待。可以调用相关操作,使信号量加1,当信号量 > 0 的时候,程序就可以继续运行了。
sem_wait(&sem);
2、发送信号量,其作用是让信号量的值+1。实现线程的同步控制。
sem_post(&sem);

常见的函数

  • sem_init()
#include <semaphore.h>
int sem_init(sem_t *sem,int pshared,unsigned int value);

作用:对由sem指定的信号量进行初始化,设置好它的共享选项,并指定一个整数类型的初始值。pshared参数控制着信号量的类型。如果 pshared的值是0,就表示它是当前进程的局部信号量;否则,其它进程就能够共享这个信号量。只对不让进程共享的信号量感兴趣。Linux线程一般不支持进程间共享信号量,pshared传递一个非零将会使函数返回ENOSYS错误。

  • sem_post(sem_t *sem);
    作用:给信号量的值加上一个“1”,(原子操作,同时对同一个信号量做加“1”操作的两个线程是不会冲突的)

  • sem_wait(sem_t *sem);
    作用:从信号量的值减去一个“1”(原子操作),但它会先等待该信号量为一个非零值才开始做减法。

  • sem_getvalue(sem_t *sem,int *valp)
    作用:获取sem的值,并保存在valp中。

  • sem_destory(sem_t *sem)
    作用:用完信号量对它进行清理。


http://www.ppmy.cn/embedded/32319.html

相关文章

ORACLE 性能优化 高水位调节

当我需要去做优化时,有一个固定的优化思路:SQL优化->索引优化->分区优化->优化器hints优化 SQL 语句优化 1. 选用适合的 ORACLE 优化器 ORACLE 的优化器共有 3 种 : a. RULE ( 基于规则 ) b. COST ( 基于成本 ) c. CHOOSE ( 选 择性) 设置缺省的优化器, 可以通…

zeekeeper总结详解

目录 Zookeeper 概念Zookeeper 命令操作Zookeeper 数据模型ZooKeeper 命令操作Zookeeper 服务端常用命令Zookeeper 客户端常用命令 Curator 介绍Curator API 常用操作ZooKeeper分布式锁原理Curator实现分布式锁API ZooKeeper 集群搭建Zookeeper 集群介绍Zookeeper 集群角色 小结…

【MATLAB源码-第201期】基于matlab的黏菌群优化算法(SMA)无人机三维路径规划,输出做短路径图和适应度曲线

操作环境&#xff1a; MATLAB 2022a 1、算法描述 黏菌优化算法&#xff08;Slime Mould Algorithm, SMA&#xff09;是一种新颖的启发式优化方法&#xff0c;其灵感来源于自然界中的真菌——黏菌。这种算法模拟了黏菌在寻找食物时的行为和网络形成策略。在本文中&#xff0c…

银行ETL-监管报送

1104报表 1104报表主要包括&#xff1a;资产负债&#xff0c;表外业务、流动性风险、贷款质量、投向行业和地区、重点客户等。 1104报表分类 普通报表、机构特色类报表。 反洗钱 大额交易、可疑交易。标签分类&#xff1a;疑似犯罪、疑似毒品、疑似传销。 反洗钱—接口报…

Golang | Leetcode Golang题解之第58题最后一个单词的长度

题目&#xff1a; 题解&#xff1a; func lengthOfLastWord(s string) (ans int) {index : len(s) - 1for s[index] {index--}for index > 0 && s[index] ! {ansindex--}return }

Django后台项目开发实战五

完成两个功能&#xff1a; HR 可以维护候选人信息面试官可以录入面试反馈 第五阶段 创建 interview 应用&#xff0c;实现候选人面试评估表的增删改功能&#xff0c;并且按照页面分组来展示不同的内容&#xff0c;如候选人基础信息&#xff0c;一面&#xff0c;二面的面试结…

配置网关,解决本地连接不上Linux虚拟机的问题

在Window环境下&#xff0c;使用远程终端工具连接不了VMware搭建的Linux虚拟机&#xff08;CentOS 7&#xff09;&#xff0c;并且在命令行ping不通该Linux虚拟机的IP地址。下面通过配置网关解决本地与Linux虚拟机连接问题&#xff1a; 1 查看虚拟机网关地址 在VMware虚拟机上…

HSDB使用教程

HSDB&#xff1a;Hostspot Debugger&#xff0c;JVM内置的工具&#xff0c;用于深入分析JVM运行时的内部状态 启动HSDB java -cp D:/tools/jdk-1.8/lib/sa-jdi.jar sun.jvm.hotspot.HSDB 获取进程id jps 连接到指定进程 查找类 通过查询查找对象 输入查询语句 select d from …

qt对话框功能介绍

1、颜色对话框 //方式一QColor color QColorDialog::getColor(Qt::red, this, QString::fromLocal8Bit("颜色对话框"),QColorDialog::ShowAlphaChannel);qDebug() <<"color:" <<color;//方式二QColorDialog dialog(Qt::red, this); // 创建对…

FileOutputStream

FileOutputStream(文件字节输出流) 作用&#xff1a;以内存为基准&#xff0c;把内存中的数据以字节的形式写出到文件中去 构造器说明public FileOutputStream(File file) 创建字节输出流管道与源文件对象接通public FileOutputStream(String filepath)创建字节输出流管道与源…

【机器学习】基于扩散模型的文本到音频生成:突破数据局限,优化音频概念与实践顺序

基于扩散模型的文本到音频生成&#xff1a;突破数据局限&#xff0c;优化音频概念与时间顺序 一、现有模型的局限与挑战二、偏好数据集的构建与利用三、Diffusion-DPO损失的应用与模型微调四、实例与代码展示五、总结与展望 随着数字化技术的迅猛发展&#xff0c;音乐和电影行业…

Spring - 6 ( 9000 字 Spring 入门级教程 )

一&#xff1a; SpringBoot 配置文件 1.1 配置文件作用 配置文件通常是一个文本文件&#xff0c;其中包含了程序或系统的各种设置、选项和参数。比如C:\Users, C:\Windows 文件夹, 以及各种 .config, .xml 文件 配置文件主要是为了解决硬编码&#xff08;代码写死&#xff0…

QT, 系统托盘 及 菜单

通过 QSystemTrayIcon 和 QMenu 可以实现pc应用的系统托盘及菜单&#xff1a; QSystemTrayIcon::setContextMenu(QMenu*); 关键代码&#xff08;截取项目中的代码&#xff09;如下&#xff1a; //!系统托盘及菜单;m_sysTray new QSystemTrayIcon(this);m_sysTray->setIco…

c#数据库: 10.调用存储过程查询信息,并显示在窗体上

查询女生信息&#xff0c;并将信息显示在窗体上: 原数据表//右键数据库名,新建查询 ------------- 新建查询窗口,添加新建存储过程Procedure_GetGirls1和查询代码如下 : CREATE PROCEDURE dbo.Procedure_GetGirls1 /*存储过程名称*/ AS SELECT * f…

ubuntu22.04 cmake 配置mysql

报错信息&#xff1a; CMake Error at CMakeLists.txt:33 (find_package): By not providing “FindMySQL.cmake” in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by “MySQL”, but CMake did not find one. Could not…

Optional学习记录

Optional出现的意义 在Java中&#xff0c;我们经常遇到的一种异常情况&#xff1a;空指针异常&#xff0c;在原本的编程中&#xff0c;为了避免这种异常&#xff0c;我们通常会向对象进行判断&#xff0c;然而&#xff0c;过多的判断语句会让我们的代码显得臃肿不堪。 所以在J…

2024五一数学建模B题思路代码与论文分析

2024五一数学建模B题完整代码和成品论文获取↓↓↓↓↓ https://www.yuque.com/u42168770/qv6z0d/gyoz9ou5upvkv6nx?singleDoc# B题 未来新城交通需求规划与可达率问题需要建立的模型和算法: 1. 图论 2. 网络流模型 3. 线性规划/整数规划 4. 组合优化 5. 随机过程 6. …

汉王科技亮相世界数字健康论坛:以AI定义第四代血压计

作为科技行业的年度盛会&#xff0c;2024年中关村论坛年会于近日在北京揭幕。 作为中关村知名的人工智能企业&#xff0c;汉王科技携大模型的最新垂直应用、柯氏音法电子血压计等创新成果&#xff0c;在4月29日中关村论坛平行论坛“2024世界数字健康论坛”上亮相。 在《AI赋能血…

LangChain Routing 学习笔记

LangChain Routing 学习笔记 0. 引言1. 使用提示词2. 使用 RunnableLambda 0. 引言 在使用大语言模型开发应用时&#xff0c;其中一个场景就是根据不同的输入&#xff0c;调用&#xff08;或者说路由到&#xff09;不同的逻辑。这就好比我们以前开发时经常使用的if ... else .…

MIKE + MATLAB - 使用DHI工具包时读取数据

这里写目录标题 1. 读取投影 1. 读取投影 dfsu2.Projection.WKTString dfsu2.Projectionans DfsProjection - 属性:Type: ProjectionWKTString: [11 System.String]Longitude: 123.0000Latitude: 0Orientation: 0dfsu2.Projection.WKTStringans PROJCS["CGCS2000_3_Degr…