当前位置: 首页 > news >正文

多进程间通信学习之消息队列共享内存信号灯集

  • 消息队列:
  • 1、基于内核实现,必须在内核空间创建消息队列
  • 2、消息队列中的消息类型正文组成;
  • 3、消息队列的默认大小为16KB
  • 运行过程:
  • 1、进程1将消息写入到消息队列,进程2根据消息的类型从消息队列中取得对应的消息
  • 2、进程1向消息队列中发送消息,可以采用阻塞或者非阻塞的方式;
  • 3、进程2从消息队列中收取消息,也可以采用阻塞或者非阻塞的方式;
  • 常用的接口函数:
  • msgget函数:
  • 功能:创建或者获取一个消息队列;
	#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>int msgget(key_t key, int msgflg);/*参数:key:	键值key 	通过ftok获取的IPC_PRIVATE 表示只有亲缘进程间能只用msgflg:消息队列的标志位IPC_CREAT|0666  或者  IPC_CREAT|IPC_EXCL|0666 返回值:成功 消息队列的id失败 -1 重置错误码*/
  • msgsnd函数:
  • 功能:向消息队列中写入一条消息;
	int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);/*参数:msqid:消息队列的idmsgp: 要写入的数据的首地址msgsz:消息正文的大小msgflg:标志位 0 阻塞发送  IPC_NOWAIT 非阻塞发送返回值:成功 0失败 -1  重置错误码*/struct msgbuf {long mtype;       /* 消息的类型 必须大于 0 */char mtext[1];    /* 消息正文 可以自定义 */};
  • msgrcv函数:
  • 功能:在消息队列中读取一条消息;
	ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);/*参数:msqid:消息队列的idmsgp: 用来保存接收的数据的缓冲区的首地址msgsz:消息正文的大小msgtyp:要接受的消息的类型0 :接收消息队列中第一条消息>0 : 接收指定类型的第一条消息<0 :一般不使用,表示接收消息队列中第一条类型最小的小于msgtyp的绝对值的消息3-2-5-500-200-8读取时,类型传 -200读取的顺序  2-3-5 msgflg:标志位 0 阻塞接收  IPC_NOWAIT 非阻塞接收返回值:成功 实际读到的正文的字节数失败 -1  重置错误码*/struct msgbuf {long mtype;       /* 消息的类型 必须大于 0 */char mtext[1];    /* 消息正文 可以自定义 */};
  • msgctl函数:
  • 功能:控制消息队列;
	int msgctl(int msqid, int cmd, struct msqid_ds *buf);/*参数:msqid:消息队列idcmd:指令IPC_STAT:获取消息队列的属性IPC_SET:设置消息队列的属性IPC_RMID:立即删除消息队列只有消息队列的创建者和所有者以及root用户可以删除消息队列msgctl函数的第三个参数被忽略buff:返回值:成功 	0失败 	-1  	重置错误码*/
  • 获取和设置消息队列的属性:
  • 属性结构体:
	struct msqid_ds {struct ipc_perm msg_perm;     /* IPC权限结构体 */time_t          msg_stime;    /* 最后一次执行msgsnd的时间 */time_t          msg_rtime;    /* 最后一次执行msgrcv的时间 */time_t          msg_ctime;    /* 最后一次被修改的时间 */unsigned long   __msg_cbytes; /* 当前消息队列中的字节数 */msgqnum_t       msg_qnum;     /* 当前消息队列中的消息数 */msglen_t        msg_qbytes;   /* 允许的最大字节数 */pid_t           msg_lspid;    /* 最后一次执行msgsnd的进程的PID */pid_t           msg_lrpid;    /* 最后一次执行msgrcv的进程的PID */};struct ipc_perm {key_t          __key;       /* 键值 */uid_t          uid;         /* 所属用户的id */gid_t          gid;         /* 所属用户的组id */uid_t          cuid;        /* 创建者的id */gid_t          cgid;        /* 创建者的组id */unsigned short 	mode;        /* 权限 */};
  • 共享内存:
  • 1、同样在内核中创建共享内存;
  • 2、进程1和进程2都能够访问到,通过这段内存空间进行数据的传递;
  • 3、共享内存是所有进程间通信方式中,效率最高的,不需要在内核中往返进行拷贝
  • 4、共享内存的内存空间大小是4KB的整数倍
  • 信号灯集:
  • 1、实现进程同步的机制
  • 2、在一个信号灯集中,可以有很多信号灯;
  • 3、这些信号灯集中的信号灯相互独立,每个灯的值的改变都不会影响到其他的信号灯;
  • 4、信号灯的值一般设置为二值量,即0或者1,其中0代表没有资源,1代表有资源

相关文章:

多进程间通信学习之消息队列共享内存信号灯集

消息队列&#xff1a;1、基于内核实现&#xff0c;必须在内核空间创建消息队列&#xff1b;2、消息队列中的消息由类型和正文组成&#xff1b;3、消息队列的默认大小为16KB&#xff1b;运行过程&#xff1a;1、进程1将消息写入到消息队列&#xff0c;进程2根据消息的类型从消息…...

机器学习基础之《回归与聚类算法(6)—模型保存与加载》

一、背景 现在我们预测每次都要重新运行一遍模型。完整的流程应该是不断调整阈值重复计算。 当训练或者计算好一个模型之后&#xff0c;那么如果别人需要我们提供结果预测&#xff0c;就需要保存模型&#xff08;主要是保存算法的参数&#xff09;。 二、sklearn模型的保存和…...

修改Openwrt软路由的web端口

如何修改openwrt路由器的web访问端口号&#xff1f; 在OpenWrt路由器上&#xff0c;如何修改Web访问端口号&#xff0c;通常涉及到修改HTTP服务器的配置文件。默认情况下&#xff0c;OpenWrt使用的HTTP服务器是uHTTPd。 以下是修改Web访问端口号的步骤&#xff1a; 一、通过…...

编程怎么学习视频教程,编程实例入门教程,中文编程开发语言工具下载

编程怎么学习视频教程&#xff0c;编程实例入门教程&#xff0c;中文编程开发语言工具下载。 给大家分享一款中文编程工具&#xff0c;零基础轻松学编程&#xff0c;不需英语基础&#xff0c;编程工具可下载。 这款工具不但可以连接部分硬件&#xff0c;而且可以开发大型的软件…...

得帆信息携手深信服,联合打造高安全PaaS超融合一体化解决方案

上海得帆信息技术有限公司&#xff08;以下简称“得帆”&#xff09;和深信服科技股份有限公司&#xff08;以下简称“深信服”&#xff09;携手推出融合安全性、稳定性、高效性于一体的全新PaaS超融合解决方案。 用户痛点分析 全面推进企业数字化与信息化的趋势下&#xff0c;…...

arcgis--浮点型栅格数据转整型

利用【Spatial Analyst工具】-【数学】-【转为整型】工具&#xff0c;将浮点型数据转为整型。如下&#xff1a; 【转为整型】对话框参数设计如下&#xff1a; 转换结果如下&#xff1a;...

nginx四层tcp负载均衡及主备、四层udp负载均衡及主备、7层http负载均衡及主备配置(wndows系统主备、负载均衡)

准备工作 服务器上安装、配置网络负载平衡管理器 windows服务器热备、负载均衡配置-CSDN博客 在windows服务器上安装vmware17 win10 上安装vmware17-CSDN博客 在windows上利用vmware17 搭建centos7 mini版 在windows上利用vmware17 搭建centos7 mini版本服务器-CSDN博客 …...

Electron 控制屏幕亮度

CMD控制屏幕亮度 一开始用brightness&#xff0c;dev下可用&#xff0c;打包后执行报错&#xff0c;找了很多文章都没办法解决。后来想到执行CMD命令去设置( 如何在 Windows 中使用命令行调整屏幕亮度 )。测试打包后正常&#xff0c;无需管理员权限。 引入exec const { exec }…...

TSINGSEE视频汇聚管理与AI算法视频质量检测方案

一、建设背景 随着互联网视频技术的发展&#xff0c;视频监管在辅助安全生产、管理等方面发挥了不可替代的作用。但是&#xff0c;在监管场景中&#xff0c;仍然存在视频掉线、视频人为遮挡、视频录像存储时长不足等问题&#xff0c;对企业的日常管理和运转存在较大的安全隐患…...

linux系统中文件系统和挂载点的联系和区别?

在 Linux 系统中&#xff0c;文件系统&#xff08;File System&#xff09;和挂载点&#xff08;Mount Point&#xff09;是密切相关的概念&#xff0c;它们之间有如下联系和区别&#xff1a; 文件系统&#xff1a;文件系统是操作系统用于组织和管理数据的一种结构。它定义了文…...

CTFSHOW 文件上传

web151 JS前端绕过 直接上传 png的图片马 然后抓包修改为php asystem("ls /var/www/html"); asystem("cat /var/www/html/flag.php"); web152 和151一样的方法也可以实现上传 asystem("ls /var/www/html"); asystem("cat /var/www/html…...

自组织竞争网络在模式分类中的应用——患者癌症发病预测

大家好&#xff0c;我是带我去滑雪&#xff01; 自组织神经网络可以通过对客观事件的反复观察、分析与比较&#xff0c;自行提示内在规律&#xff0c;并对具有共同特征的事物进行正确的分类。该网络更与人脑中生物神经网络的学习模式类似&#xff0c;即可以通过自动寻找样本中的…...

神经网络中的量化与蒸馏

本文将深入研究深度学习中精简模型的技术&#xff1a;量化和蒸馏 深度学习模型&#xff0c;特别是那些具有大量参数的模型&#xff0c;在资源受限环境中的部署几乎是不可能的。所以就出现了两种流行的技术&#xff0c;量化和蒸馏&#xff0c;它们都是可以使模型更加轻量级&…...

数据库——表结构相关SQL

一、GP或PostgreSQL 1.获取表结构 SELECT a.schemaname schema_name, a.tablename table_name, string_agg(b.column_name, ,) AS columns FROM (SELECT schemaname, tablename FROM pg_tables WHERE schemaname public and tablename like test%) a LEFT JOIN (SELECT tabl…...

python 爬虫之requests 库以及相关函数的详细介绍

get 函数 当你使用 requests.get 函数时&#xff0c;你可以按照以下步骤来发起一个 GET 请求&#xff1a; 导入 requests 模块&#xff1a; 在你的 Python 脚本或程序中&#xff0c;首先导入 requests 模块。 import requests指定目标 URL&#xff1a; 设置你要请求的目标 URL…...

突破职场竞争,引领未来发展:考取《研发效能(DevOps)工程师职业技术认证》

就业形势堪忧&#xff0c;什么最有保障&#xff1f;考个“国家级”证书傍身吧&#xff01; 工信部教考中心作为中国领先的行业技能认证机构&#xff0c;其颁发的认证证书不仅代表了个人在信息技术领域的专业能力&#xff0c;更可以录入工业和信息化技术技能人才数据库&#xf…...

设计模式例子

策略模式&#xff08;Strategy Pattern&#xff09; 策略模式 (Strategy Pattern): 定义一系列算法&#xff0c;将每个算法都封装起来&#xff0c;并使它们之间可以互换。例如&#xff1a;java.util.Comparator 以下是一个简单的Java策略模式的例子&#xff0c;涉及一个商品的…...

腾讯云入侵

早上8点左右收到腾讯云的相关短信&#xff0c;提示机器可能存在挖坑风险。马上登录机器看了一下&#xff0c;发现crontab有个比较诡异的任务 [devVM_0_12_centos ~]$ crontab -l 11 * * * * /home/dev/.config/systemd/user/systemd-tmpfiles-cleanup/systemd-tmpfiles-cleanu…...

第二章 智能家居子系统——C51单片机 配置波特率115200

前言 本章为智能家居项目的第二章&#xff0c;本章主要写51单片机的定时器timer&#xff0c;串口UART&#xff0c;中断&#xff0c;外接模块DHT11 同项目其他博文&#xff1a; 项目的概述链接&#xff1a;Linux智能家居项目概述-CSDN博客 第一章 主控代码开发链接&#xff1a…...

registry镜像仓库通过HTTP API删除镜像

registry组件提供了HTTP的接口&#xff0c;可以参考&#xff1a;官网API说明 删除思路&#xff1a; 镜像由多个layers层组成&#xff0c;DELETE /v2/<name>/blobs/<digest>可以用来删除一个单独的层&#xff0c;但是我们的目的不是要删除层。 我们用DELETE /v2/…...

UG NX 合并曲面减少面得数量

“同步建模”里的“优化面” 确实是处理这类问题最直接、最高效的命令。对于客户发来的非参数化模型&#xff08;比如 STP、IGS 等&#xff09;&#xff0c;中间有碎线或分割线导致的“假面”&#xff0c;用它来合并非常合适。核心操作&#xff1a;使用“优化面”命令 启动命令…...

基于双向反激变换器的SOC估算与主动均衡策略仿真研究——复现硕士论文并拓展六节电池模型与均衡策略分析

基于双向反激变换器的SOC估算与主动均衡仿真 可以 [1]复现硕士论文&#xff1a;《锂离子电池SOC估算与主动均衡策略研究_王昊》 [2]六节电池模型&#xff1a;使用Simmulink搭建了六节电池主动均衡仿真 [3]均衡策略&#xff1a;选择了电压、SOC及其分阶段使用作为主动均衡变量&a…...

09_微服务划分与团队人数之阿里实践与行业案例

微服务划分与团队人数之阿里实践与行业案例 体系内容 拆分维度:业务能力维度、通用能力维度、非功能维度 组织原则:康威定律、领域自治、平台沉淀、核心/非核心差异化治理 Spring Cloud Alibaba 视角:Nacos、Sentinel、RocketMQ、Seata、Dubbo 在企业场景中的组合打法 行业…...

深入理解Python @dataclass:从基础到高级用法

Python 3.7引入了dataclass装饰器&#xff0c;这是一个强大的工具&#xff0c;能够显著减少数据类的样板代码。本文将详细介绍dataclass的各种用法&#xff0c;特别是如何正确处理可变默认值和类型注解。 什么是dataclass dataclass是位于dataclasses模块中的装饰器&#xff0c…...

告别OBS!用JavaCV+FFmpeg在Windows上搭建个人直播推流服务器(含Nginx配置)

用JavaCVFFmpeg构建Windows直播推流服务器的全栈指南 直播技术正在从专业领域向个人开发者渗透&#xff0c;但传统方案如OBS往往过于笨重且缺乏定制性。本文将带你用JavaCVFFmpegNginx搭建一套轻量级直播推流服务器&#xff0c;实现从视频采集、编码推流到服务端分发的完整链路…...

基于MATLAB的多种概率分布拟合与KS检验:从GEV到Exponential分布选择与实践

11种概率分布的拟合与ks检验&#xff0c;可用于概率分析&#xff0c;可靠度计算等领域 案例中提供11种概率分布&#xff0c;具体包括&#xff1a;gev、logistic、gaussian、tLocationScale、Rayleigh、Loglogistic、Lognormal、GeneralizedPareto、Weibull、Gamma、Exponential…...

率零测评:AI率83%的文章降完是什么效果

率零&#xff08;www.0ailv.com&#xff09;最大的特点是便宜——3.2元/千字&#xff0c;在主流工具里价格最低&#xff0c;还有1000字免费体验。这让很多AI率高的同学把它作为第一选择。 它的实际效果怎么样&#xff1f;这篇文章来说清楚。 测试基本情况 测试论文&#xff…...

flac3d7.0主应力方向导出与可视化:使用fish导出单元体数据并用matlab绘制塑性区图

flac3d7.0主应力方向的导出并绘图 使用fish将单元体的三个主应力方向数据导出&#xff0c;并使用matlab绘图&#xff0c;可只对部分区域(如塑性区)的数据进行绘图在岩土工程数值模拟后处理中&#xff0c;三维主应力方向可视化是个挺有意思的活。今天咱们直接上手实操&#xff0…...

comsol方形锂电池电化学—热耦合模型充放电循环热仿真,三种模型 一维电化学模型耦合三维方形...

comsol方形锂电池电化学—热耦合模型充放电循环热仿真&#xff0c;三种模型 一维电化学模型耦合三维方形铝壳电池模型 还包括电池组风冷、相变散热模型最近在折腾方形锂电池的充放电热仿真&#xff0c;发现电化学和热耦合的坑比想象中深。尤其是当一维电化学模型要和三维结构联…...

手写数字识别在FPGA上的暴力美学

fpga实现cnn神经网络加速 手写字硬件加速 FPGA artix7-100t 纯verilog编写 神经网络硬件加速 使用ov5640摄像头dvp接口 verilog实现手写字识别 包括卷积层、全连接层、池化层、softmax&#xff0c;有效减轻误识别问题注意: 该项目并未使用到arm核&#xff0c;是使用传统…...