Linux编程——进程间通信(信号灯集、消息队列)

news2024/11/24 3:18:32

目录

  • 一、信号灯集
    • 1.1 概念
    • 1.2 信号灯集创建步骤⭐⭐⭐
    • 1.3 信号灯集对应函数
  • 二、消息队列

一、信号灯集

1.1 概念

信号灯(semaphore),也叫信号量。它是不同进程间或一个给定进程内部不同线程间同步的机制;System V的信号灯是一个或者多个信号灯的一个集合。其中的每一个都是单独的计数信号灯。而Posix信号灯指的是单个计数信号灯。
通过信号灯集实现共享内存的同步操作。

1.2 信号灯集创建步骤⭐⭐⭐

  1. 创建key值 ftok
  2. 创建或打开信号灯集 semget
  3. 初始化信号灯:semctl
  4. PV操作:semop
  5. 删除信号灯集 :semctl

1.3 信号灯集对应函数

  1. semget
    int semget(key_t key, int nsems, int semflg);

    • 功能:创建/打开信号灯
    • 参数:
      • key:ftok产生的key值
      • nsems:信号灯集中包含的信号灯数目
      • semflg:信号灯集的访问权限,通常为
        IPC_CREAT | IPC_EXCL |0666
    • 返回值:
      • 成功:信号灯集ID
      • 失败:-1

    例:创建或打开信号灯集 ↓
    在这里插入图片描述
    运行:
    在这里插入图片描述

    🚨注意:第一次创建信号灯集,semid为0,不能用,要排除。故第一次创建完之后要删除semid为0的信号灯集,重新创建。
    查看系统当前信号灯集:ipcs -s
    删除系统信号灯集:ipcrm -s semid

  2. semctl
    int semctl ( int semid, int semnum, int cmd…/*union semun arg*/);

    • 功能:信号灯集合的控制(初始化/删除)
    • 参数:
      • semid:信号灯集ID
      • semnum: 要操作的集合中的信号灯编号
      • cmd:
        • GETVAL:获取信号灯的值,返回值是获得值
        • SETVAL:设置信号灯的值,需要用到第四个参数:共用体
        • IPC_RMID:从系统中删除信号灯集合
    • 返回值:成功 0;失败 -1

    用法:第四个参数是一个共用体,需自己创建,共用体第一个参数就是信号灯的值
    在这里插入图片描述

union semun{
    int val;
}mysemun;
mysemun.val = 10;
semctl(semid, 0, SETVAL, mysemun);

获取信号灯值:函数semctl(semid, 0, GETVAL)的返回值

二、消息队列

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/882944.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三星电子首席技术官:BSPDN技术开发计划曝光,背部供电技术创新

在ETNews的报道之后,三星电子的代工部门首席技术官Jung Ki-tae Jung透露了该公司在BSPDN技术开发方面的计划。 BSPDN技术是一项创新技术,旨在更好地利用半导体晶圆背面空间的潜力。虽然该技术尚未在全球范围内实施,但三星电子成为首家公开披…

ApiPost设置全局令牌

为了避免请求接口每次都要请求登录,获取令牌鉴权,我们可以设置全局令牌(token),避免处处单独使用令牌,造成环境混乱,使用如下: 接口设置 我们先配置好请求接口和请求参数&#xff0…

QTreeWidget基本属性操作

文章目录 一、背景设置1、添加背景颜色之前与之后的对比1.2背景设置的两种方式 2、边框设置2.1、演示以上参数的实际效果2.1.1、无边框、虚线、实线边框演示2.1.2、边框的3D效果 一、背景设置 1、添加背景颜色之前与之后的对比 1.2背景设置的两种方式 通过QT设计界面中的改变…

基于eBPF技术构建一种应用层网络管控解决方案

引言 随着网络应用的不断发展,在linux系统中对应用层网络管控的需求也日益增加,而传统的iptables、firewalld等工具难以针对应用层进行网络管控。因此需要一种创新的解决方案来提升网络应用的可管理性。 本文将探讨如何使用eBPF技术构建一种应用层网络…

观察者模式 Observer Pattern 《游戏编程模式》学习笔记

定义 观察者模式定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 这是定义,看不懂就看不懂吧,我接下来举个例子慢慢说 为什么我们需要观察者模式 我们看一个很简…

软件确认测试报告的作用,第三方测试机构进行确认测试的好处

近年来,随着软件产品的不断发展和普及,软件确认测试作为一项重要的质量保障手段也越来越受到关注,主要是为了检测软件产品是否符合需求规格和预期功能,以及是否存在缺陷和问题。对于软件产品开发商来说,进行确认测试是…

未济卦-物不可穷

前言:学无止境,人生没有终点,虽说是六十四卦的最后一卦,仍是“未济”,今天学习未济卦的卦辞和爻辞。 卦辞 亨;小狐汔济,濡其尾,无攸利。 序卦:无不可穷也,故…

计蒜客T1122——最长最短单词

又是一道水题&#xff0c;基本思路是从目标串中根据空格分离出来每一个单词&#xff0c;然后分别找出最大值与最小值&#xff0c;输出即可~ #include <iostream> #include <string> #include <vector> using namespace std;int main(int argc, char** argv)…

车辆维修保养记录接口:数据对接,价格明细表精准展示

随着人们生活水平的提高&#xff0c;私家车越来越多&#xff0c;对车辆的维修保养需求也越来越高。车辆维修保养记录是车主和维修人员都需要关注的重要信息。然而&#xff0c;由于维修保养记录的复杂性和数据量大&#xff0c;人工管理难以胜任&#xff0c;这就需要开发一种接口…

Python源码05:使用Pyecharts画词云图图

**Pyecharts是一个用于生成 Echarts 图表的 Python 库。Echarts 是一个基于 JavaScript 的数据可视化库&#xff0c;提供了丰富的图表类型和交互功能。**通过 Pyecharts&#xff0c;你可以使用 Python 代码生成各种类型的 Echarts 图表&#xff0c;例如折线图、柱状图、饼图、散…

jstat -gcutil 命令使用

jstat -gcutil命令用于监视Java应用程序的垃圾回收情况。它提供了有关堆内存使用情况、垃圾回收器的活动以及垃圾回收的效率的信息。 目录 一、基本语法 二、执行结果 一、基本语法 jstat -gcutil <pid> <interval> <count> 参数解释&#xff1a; <p…

C++11实用技术(四)for循环该怎么写

普通用法 在C遍历stl容器的方法通常是&#xff1a; #include <iostream> #include <vector>int main() {std::vector<int> arr {1, 2, 3};for (auto it arr.begin(); it ! arr.end(); it){std::cout << *it << std::endl;}return 0; }上述代…

科东软件受邀参加第五届国产嵌入式操作系统技术与产业发展论坛

8月12日&#xff0c;第五届国产嵌入式操作系统技术与产业发展论坛暨嵌入式系统联谊会主题讨论会&#xff08;总第29次&#xff09;在杭州成功举行。这次论坛的主题是“面向异构多核智能芯片的混合关键系统研究与应用”&#xff0c;上午是“嵌入式异构多核智能芯片产业发展”的主…

kubernetes企业级高可用部署

目录 1、Kubernetes高可用项目介绍 2、项目架构设计 2.1、项目主机信息 2.2、项目架构图 1、Kubernetes高可用项目介绍 2、项目架构设计 2.1、项目主机信息 2.2、项目架构图 2.3、项目实施思路 3、项目实施过程 3.1、系统初始化 3.2、配置部署keepalived服务 3.3、…

【Redis基础篇】浅谈分布式系统(一)

一、浅谈分布式系统 1. 单机架构&#xff1a;只有一台服务器&#xff0c;这个服务器负责所有的工作。 如果遇到了服务器不够的场景怎么处理? 开源&#xff1a;增加更多的硬件资源节流&#xff1a;软件上的优化&#xff0c;优化代码等…一台服务器资源使用有限&#xff0c;就…

使用Mix-in类组合功能

为什么需要Mix-in? 在学习面向对象时我们知道&#xff0c;类可以通过继承类获得属性和方法&#xff0c;通过继承可以减少重复代码、提高复用率。Python支持多继承&#xff0c;一个类可以通过继承多个类来得到它们的功能。但多继承会带来一些问题&#xff0c;比如属性冲突。那…

AS报错:错误: 无效的源发行版:12

背景&#xff1a;今天用Android Studio 编译以前的demo,运行报错&#xff1a;错误: 无效的源发行版&#xff1a;12 截图如下&#xff1a; 解决办法&#xff1a;将jdk版本由11升级到13,解决了。 路径&#xff1a;Setting/Build,Execution,Deployment/Build Tools/Gradle/Gradl…

Python多线程与线程池(python线程池ThreadPoolExecutor)concurrent.futures高级别异步执行封装

文章目录 Python多线程与线程池一、Python多线程1.1 线程简介1.2 Python中的多线程1.3 GIL限制 二、线程池2.1 Python中的线程池 三、代码分析四、参考资料 Python多线程与线程池 一、Python多线程 在进行复杂的计算或处理大量数据时&#xff0c;可以通过创建多个线程来同时执…

MySQL卸载并重装指定版本

MySQL卸载并重装制定版本 学习新的项目&#xff0c;发现之前的Navicat已经失去了与现有MySQL的链接&#xff0c;而且版本也不适合&#xff0c;为了少走弯路&#xff0c;准备直接重装相应版本的MySQL 卸载现有MySQL 停止windows的MySQL服务&#xff0c;【windowsR】打开运行框…

电脑提示vcomp140.dll丢失怎样修复?vcomp140.dll的三种修复方法

vcomp140.dll是Microsoft Visual C所需的一个动态链接库文件&#xff0c;用于支持C并行编程。为了更好地理解为什么vcomp140.dll会丢失&#xff0c;并对其进行详细介绍&#xff0c;下面将详细解释以下几个方面&#xff1a; 动态链接库&#xff08;DLL&#xff09;的作用和原理…