当前位置: 首页 > 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/…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者&#xff0c;高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法&#xff0c;分为两大系列&#xff1a; 一、getElementBy... 系列 传统方法&#xff0c;直接通过 DOM 接口访问&#xff0c;返回动态集合&#xff08;元素变化会实时更新&#xff09;。…...

pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决

问题&#xff1a; pgsql数据库通过备份数据库文件进行还原时&#xff0c;如果表中有自增序列&#xff0c;还原后可能会出现重复的序列&#xff0c;此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。 点击菜单“其它”-》“序列”&#xff0c;…...