进程间通信IV System V 系列(linux)

article/2025/6/23 8:56:54

目录

消息队列

原理

操作

补充概念

信号量 (原子性计数器)

原理

操作 (和共享内存相似)

总结

小知识


消息队列

原理

在内核中建立一个队列,进程可以相互进行通信,通过队列进行IPC,就是进程之间发送带类型的数据块。

操作

接口和共享内存基本相似

msgget 获取消息队列

 

msgctl 控制消息队列

 msgsnd 写入数据

补充概念

共享资源:多个执行流(进程),能看到的同一份公共资源。


临界资源:被保护起来的资源


保护的方式:互斥和同步


互斥:任何时候,只允许一个执行流访问资源


同步:多个执行流,访问资源时,具有一定的顺序性。


临界资源或互斥资源:系统中某些资源一次只允许一个进程使用


临界区:在进程中涉及到互斥资源的程序段。(我们写的代码 = 访问临界资源的代码(临界区)+不访问临界资源的代码(非临界区))

信号量 (原子性计数器)

原理

本质是一种描述临界资源数量的原子性计数器,是对资源的预定机制

保证:1.资源不会被多申请

2.所有进程未来向通过临界区访问临界资源,先申请信号量(让信号量计数器 -- ),申请成功才能访问临界区资源

 

信号量要被多个进程看到,本身也就是一个共享资源。 自己也要保护自己,通过要求对信号量的++和--必须为原子操作来保护。(原子操作:进行操作时不会被其他操作影响)

操作 (和共享内存相似)

semget 申请信号量

参数:

nsems: 信号量的数量

semctl 控制信号量

参数:

semnum:要进行操作的信号量个数

semop 对信号量进行操作

总结

1.所有的system V资源生命周期都随内核,都需要自己手动释放

2.所有的system V资源,都要被OS管理起来,都有描述它的结构体

3.内核中管理IPC资源,使用柔性数组,之前的shmid等id都是上面柔性数组的下标。

小知识

1.ipcs -p 查看消息队列

ipcrm -q msgid 删除消息队列


2.ipcs -s查看信号量

ipcrm -s semid 删除信号量


3.C语言多态:一个数组,元素为指向不同结构体中的相同的元素的指针,这样一个数组可以管理不同的结构体对象,多态。


http://www.hkcw.cn/article/kmwpLvMIOt.shtml

相关文章

【MySQL】索引(B+树详解)

MySQL(五)索引 一、索引的减I/O设计 1.读取量 2.搜索树 2.1方向 2.2有序 3.分多叉 3.1B树 弊端: 3.2B树 3.2.1非叶子-搜索字段 3.2.1.1海量分叉 3.2.1.1.1最大式 3.2.1.1.2最快式 3.2.1.2缓存内存 3.2.1.2.1字段总量小 3.2.1.2.2时间复杂度 3.2.1.3区间搜索向…

2025年全国青少年信息素养大赛复赛C++算法创意实践挑战赛真题模拟强化训练(试卷4:共计6题带解析)

2025年全国青少年信息素养大赛复赛C++算法创意实践挑战赛真题模拟强化训练(试卷4:共计6题带解析) 第1题:最佳情侣身高差(题目及解析) 题目描述 专家通过多组情侣研究数据发现,最佳的情侣身高差遵循着一个公式:(女方的身高) 1.09 =(男方的身高)。如果符合,你俩的身…

5.31 day33

知识点回顾: PyTorch和cuda的安装 查看显卡信息的命令行命令(cmd中使用) cuda的检查 简单神经网络的流程 数据预处理(归一化、转换成张量) 模型的定义 继承nn.Module类 定义每一个层 定义前向传播流程 定义损失函数和优…

【C++】模板

目录 1、函数模板 基本用法 函数模板的实现原理 函数模板的实例化 模板参数的匹配原则 2、类模板 类模板的定义格式 类模板的实例化 1、函数模板 基本用法 template < typename T >返回值类型 函数名(参数列表){} template 是模板的意思&#xff0c;typename是…

第六十二节:深度学习-加载 TensorFlow/PyTorch/Caffe 模型

在计算机视觉领域,OpenCV的DNN(深度神经网络)模块正逐渐成为轻量级模型部署的利器。本文将深入探讨如何利用OpenCV加载和运行三大主流框架(TensorFlow、PyTorch、Caffe)训练的模型,并提供完整的代码实现和优化技巧。 一、OpenCV DNN模块的核心优势 OpenCV的DNN模块自3.3…

Linux系统下安装配置 Nginx

Windows Nginx https://nginx.org/en/download.htmlLinux Nginx https://nginx.org/download/nginx-1.24.0.tar.gz解压 tar -zxvf tar -zxvf nginx-1.18.0.tar.gz #解压安装依赖&#xff08;如未安装&#xff09; yum groupinstall "Development Tools" -y yum…

qwen3解读

1. 模型架构 重点&#xff1a; 思维模式和非思维模式这两种不同的操作模式集成到一个模型中。这样可以让用户在这些模式间切换&#xff0c;而不是在不同模型间切换。多阶段的后培训方法&#xff1a;增强推理和非推理模式。将基础模型和人的偏好结合。 预训练阶段&#xff1a…

用127.0.0.1访问VMware虚拟机中间件

文章目录 前言一、虚拟机安装、插件安装二、改虚拟机配置1.更改虚拟机使用的是 NAT 模式2.编辑 VMware 的 NAT 设置并添加端口转发 总结至此大功告成了&#xff01;&#xff01;&#xff01; 前言 docker 安装中间件很方便,平时使用windows作开发,如果想快速安装中间件,那么首…

【大模型部署】mac m1本地部署 ChatGLM3-6B 超详细教程

本人环境&#xff1a;macOS 15.5 (Sonoma) - Apple M1 / 16 G 目标&#xff1a;在 mac m1 16G 上 完全离线 的本地模型目录上&#xff0c;跑通官方 ChatGLM3-6B 目录 背景 & 踩坑记录 准备工作 新建 Conda 环境并安装依赖 关键环境变量 运行 composite_demo 常见报错与…

评标专家随机抽选系统-建设方案——仙盟创梦IDE

政策要求 抽选记录保存 专辑库管理 系统统计 抽选打印 系统分级管理 项目管理 系统分级管理 集团公司管理 专家补抽 评标专家随机抽选 1、系统分级管理合规 符合《数据安全法》第二十一条&#xff08;分类分级制度&#xff09;&#xff0c;安全按照不同职级&#xff0c;配置权…

2.5/Q2,Charls最新文章解读

文章题目&#xff1a;Trajectories of depressive symptoms and risk of chronic liver disease: evidence from CHARLS DOI&#xff1a;10.1186/s12876-025-03943-7 中文标题&#xff1a;抑郁症状的轨迹和慢性肝病风险&#xff1a;来自 CHARLS 的证据 发表杂志&#xff1a;BM…

win1011安装WinGet和Windows Terminal

前言 winget是微软推出的类似Ubuntu apt 的包管理器。安装winget建议一同安装微软推出的代替conhost.exe的新版命令提示符工具Windows Terminal。 安装 Windows Terminal 微软商店 github 安装后以管理员打开老版命令提示符&#xff0c;上方任务栏右键-默认值-终端-默认终端…

深 入 剖 析 单 链 表:从 原 理 到 实 战 应 用

深 入 剖 析 单 链 表&#xff1a;从 原 理 到 实 战 应 用 顺 序 表 的 问 题单 链 表单 链 表 与 顺 序 表 区 别相 关 概 念链 表 定 义单 链 表 定 义存 储 结 构 单 链 表 的 操 作 实 现代 码 全 貌 与 功 能 介 绍单 链 表 的 功 能 说 明代 码 效 果 展 示代 码 详 解S…

【LLM相关知识点】关于LLM项目实施流程的简单整理(一)

【LLM相关知识点】关于LLM项目实施流程的简单整理&#xff08;一&#xff09; 文章目录 【LLM相关知识点】关于LLM项目实施流程的简单整理&#xff08;一&#xff09;零、学习计划梳理&#xff1a;结合ChatGPT从零开始学习LLM & 多模态大模型一、大模型相关应用场景和头部企…

Vue 核心技术与实战day07

1. vuex概述 2. 构建 vuex [多组件数据共享] 环境 <template><div id"app"><h1>根组件- {{ title }}- {{ count }}</h1><input :value"count" input"handleInput" type"text"><Son1></Son1>…

【android bluetooth 案例分析 04】【Carplay 详解 3】【Carplay 连接之车机主动连手机】

1. 背景 在前面的文章中&#xff0c;我们已经介绍了 carplay 在车机中的角色划分&#xff0c; 并实际分析了 手机主动连接车机的案例。 感兴趣可以 查看如下文章介绍。 【android bluetooth 案例分析 04】【Carplay 详解 1】【CarPlay 在车机侧的蓝牙通信原理与角色划分详解】…

【stm32开发板】单片机最小系统原理图设计

一、批量添加网络标签 可以选择浮动工具中的N&#xff0c;单独为引脚添加网络标签。 当芯片引脚非常多的时候&#xff0c;选中芯片&#xff0c;右键选择扇出网络标签/非连接标识 按住ctrl键即可选中多个引脚 点击将引脚名称填入网络名 就完成了引脚标签的批量添加 二、电源引…

Linux --OS和PCB

目录 认识冯诺依曼系统 操作系统概念与定位 1.概念 2.设计OS的目的 3.OS的核心功能 4.系统调⽤和库函数概念 深⼊理解进程概念&#xff0c;了解PCB 1.基本概念与基本操作 2.描述进程-PCB 基本概念 task_ struct 的内容分类 认识冯诺依曼系统 在计算机中小到个人的笔…

2025最新版在Windows上安装Redis(仅限开发环境)

使用一位GitHub的博主做的Redis-Windows,截止现在更新到8.0.2 Releases redis-windows/redis-windows GitHub https://github.com/redis-windows/redis-windows/releases 我使用6.2.18版本做例子,使用6.2以上版本,因为一些语法,比如lpop,rpop,zrange,zdiff集合操作比旧版有…

[python]Prophet‘ object has no attribute ‘stan_backend‘解决方法

测试环境&#xff1a; prophet1.1.4 写代码&#xff1a; from prophet import Prophet modelProphet() print(123) 在anaconda prompt里面没有报错&#xff0c;但是打开jupyter notebook会报错Prophet object has no attribute stan_backend&#xff0c;据此猜测jupyter应该…