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

进程与线程(7)

IPC通信方式:

一、共享内存

         system v :  共享内存 

  1. 是一块,内核预留的空间 
  2. 最高效的通信方式 (避免了用户空间 到 内核空间的数据拷贝)


 

    二、IPC对象操作通用框架:

key值 ==> 申请 ==》读写 ==》关闭 ==》卸载

1.ftok函数

        产生key值

 key_t ftok(const char *pathname, int proj_id);

        (1)功能:将pathname 和 proj_id 转换为 key值 

        (2)参数:pathname:给一个路径名 ;proj_id:工程id       eg: 'A'
        (3)返回值:成功: key值;失败: -1     

key_t key = ftok("/",'A');if (key < 0){perror("ftok fail");return -1;}printf("key = %d\n",key);
2.shmget函数

        通过key获取ipc对象 (共享内存)

int shmget(key_t key, size_t size, int shmflg);

        (1)功能:使用唯一键值key向内核提出共享内存使用申请
        (2)参数:key:唯一键值;size: 要申请的共享内存大小;shmflg: 申请的共享内存访问权限,八进制表示(如果是第一个申请,则用IPC_CREAT;如果要检测是否存在,用IPC_EXCL)
        (3)返回值:成功: 返回共享内存id,一般用shmid表示;失败 : -1;

int shmid = shmget(key,1024,IPC_CREAT|0666);if (shmid < 0){perror("shmget fail");return -1;}printf("shmid = %d\n",shmid);
3.shmat函数

        共享内存 绑定 

void *shmat(int shmid, const void *shmaddr, int shmflg);

        (1)功能:将指定shmid对应的共享内存映射到本地内存。

        (2)参数:shmid:要映射的本地内存;shmaddr:本地可用的地址,如果不确定则用NULL,表示由系统自动分配;shmflg:(0 :表示读写;SHM_RDONLY:只读)
        (3)返回值:成功: 返回映射的地址,一般等于shmaddr;失败: (void*)-1        

void *p = shmat(shmid,NULL,0);if(p == (void *)-1){perror("shmid fail");return -1;}signal(SIGUSR1,handler);pid_t *q = (pid_t *)p;*q = getpid();char *s = (char *)p;while(1){printf("s = %s\n",s);if(strncmp(s,"quit",4) == 0){break;}paus
4.shmdt函数:

        解除绑定(映射)

    int shmdt(const void *shmaddr);

        (1)功能:将本地内存与共享内存断开映射关系。
        (2)参数:shmaddr 要断开的映射地址。
        (3)返回值:成功:  0;失败:  -1;

if(shmdt(p) < 0){perror("shmdt fail");return -1;}
5.shmctl函数

        销毁IPC对象 

 int shmctl(int shmid, int cmd, struct shmid_ds *buf); //ctl = control 

        (1)功能:修改共享内存属性,也可以删除指定的共享内存对象。
        (2)参数:shmid: 要删除的共享内存对象;cmd: IPC_RMID 删除对象的宏;buff:  NULL 表示只删除对象。
        (3)返回值:成功: 0; 失败: -1

 if(shmctl(shmid,IPC_RMID,NULL) < 0){perror("shmctl fail");return -1;}

练习:

二、消息队列

        消息队列是一旦创建,则会一直存在。除非关机,或者自己在程序中做删除,或者通过命令的方式(ipcrm)显式的来删除!消息队列可以实现对不同类型的消息的收发,那么这些类型的消息是放在同一个消息队列中的!接收方可以学着接受哪种类型的消息!

三、信号量集        

        信号灯的出现主要是为了解决多任务程序并发执行时,对资源的访问出现的竞争同步的问题。信号量最初是对资源的一种抽象和模拟,最初的信号量(整型信号量),就是通过一个数值,来表示某种资源的个数,在你这个抽象的基础上,他的发明者Dijkstra(迪杰斯塔拉)为其制定了两个原子性(一次性执行完的,不可被中断的)的操作,P操作(passeren(申请通过)),V操作(vrijgeven释放)来实现对互斥资源的访问,后来处于对(1).多个临界资源的访问,(2)和资源使用数量的限制(在有些情况下,当资源数量低于某一下限值时,便不予分配).信号量的概念得到进一步发展,形成了所谓的”信号灯集”.

相关文章:

进程与线程(7)

IPC通信方式&#xff1a; 一、共享内存 system v &#xff1a; 共享内存 是一块&#xff0c;内核预留的空间 最高效的通信方式 (避免了用户空间 到 内核空间的数据拷贝) 二、IPC对象操作通用框架&#xff1a; key值 > 申请 》读写 》关闭 》卸载 1.ftok函数&#xff1a;…...

传知代码-自动化细胞核分割与特征分析(论文复现)

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 引言 细胞核分割和分类在医学研究和临床诊断中具有重要意义。精准的细胞核分割能够帮助医生更好地识别和分析细胞核的形态学特征&#xff0c;从而辅助疾病诊断、癌症检测以及药物研发。HoverNet是一种基于深度学…...

Vue UI - 可视化的Vue项目管理器

概述 Vue CLI 3.0 更新后&#xff0c;提供了一套全新的可视化Vue项目管理器 —— Vue UI。所以要想使用它&#xff0c;你的 Vue CL I版本必须要在v3.0以上。 一、启动Vue UI 1.1 环境准备 1.1.1 安装node.js 访问官网&#xff08;外网下载速度较慢&#xff09;或 http://nod…...

团队管理之敏捷开发

一、敏捷实践 敏捷开发中一直秉承的理念和宣言是&#xff1a;我们正在通过亲身实践以及帮助他人实践&#xff0c;揭示更好的软件开发方法。通过这项工作&#xff0c;我们认为&#xff1a;个体和交互胜过过程和工具、可以工作的软件胜过面面俱到的文档、客户合作胜过合同谈判、…...

Hive3:表的常用修改语句

1、表重命名 ALTER TABLE old_table_name RENAME TO new_table_name;如&#xff1a; ALTER TABLE score4 RENAME TO score5;2、修改表属性值 ALTER TABLE table_name SET TBLPROPERTIES table_properties; table_properties:: (property_name property_value, property…...

MidJourney付费失败的原因以及失败后如何取消或续订(文末附MidJourney,GPT-4o教程)

MidJourney付费失败的原因 MidJourney付费失败的原因可能包括支付方式无效、支付信息错误、网络问题、账户设置问题等。 ‌支付方式无效或信息错误‌&#xff1a;如果用户提供的支付方式&#xff08;如信用卡&#xff09;信息不正确&#xff0c;或者支付方式本身不支持该地区…...

PHP安全开发

安全开发 PHP 基础 增&#xff1a;insert into 表名(列名 1, 列名 2) value(‘列 1 值 1’, ‘列 2 值 2’); 删&#xff1a;delete from 表名 where 列名 ‘条件’; 改&#xff1a;update 表名 set 列名 数据 where 列名 ‘条件’; 查&#xff1a;select * from 表名 wher…...

【大模型从入门到精通32】开源库框架LangChain RAG 系统中的问答技术2

这里写目录标题 探索高级问答链类型MapReduce 和 Refine 技术 实用建议和最佳实践解决 RetrievalQA 限制结论进一步阅读和探索理论问题实践问题 探索高级问答链类型 MapReduce 和 Refine 技术 MapReduce 和 Refine 是设计用来规避由语言模型 (LM) 上下文窗口大小所导致的限制…...

MySQL 数据库管理

在 MySQL 中&#xff0c;数据库管理是非常基础但又至关重要的技能。无论是创建新的数据库、选择当前使用的数据库&#xff0c;还是查看数据库的相关信息&#xff0c;这些操作都是日常数据库管理中不可或缺的一部分。本文将详细介绍 MySQL 数据库管理的基本操作&#xff0c;包括…...

屏幕录制了一个视频,发现有些部分是不需要的,那么我们就用到视频剪辑的工具,利用必剪去删除中间的一部分视频,并且导出,然后利用格式工厂去压缩mp4文件的过程。

1、我们经常会去做一些视频教程或者软件的使用说明等等&#xff0c;做完了以后&#xff0c;会有增加字幕&#xff0c;或者去掉不需要一段视频。 2、打开必剪软件 3、点击【开始制作】 先将视频拖动到1的位置&#xff0c;然后将播放区中的视频&#xff0c;拖到2的区域&#xff…...

代码随想录跟练第六天——LeetCode

第454题.四数相加II 力扣题目链接(opens new window) 给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) &#xff0c;使得 A[i] B[j] C[k] D[l] 0。 为了使问题简单化&#xff0c;所有的 A, B, C, D 具有相同的长度 N&#xff0c;且 0 ≤ N ≤…...

【Qt】常用控件QCalendarWidget的使用

常用控件QCalendarWidget的使用 QCalendarWidget表示一个日历 核心属性 属性说明 selectDate 当前选中的⽇期 minimumDate 最⼩⽇期 maximumDate 最⼤⽇期 firstDayOfWeek 每周的第⼀天(也就是⽇历的第⼀列) 是周⼏. gridVisible 是否显⽰表格的边框 selectionMode…...

Nginx: 配置项之main段核心参数用法梳理

概述 我们了解下配置文件中的一个全局段&#xff0c;有哪些配置参数&#xff0c;包括后面的 events 字段&#xff0c;有哪些配置参数这里面也有一些核心参数, 对于我们Nginx运行的性能也是有很重要的帮助我们现在首先关注整个 main 段的一个核心参数用法所谓 main 段&#xff…...

密码学之RSA算法

文章目录 1. RSA算法介绍1.2 算法历史与发展1.3 算法应用场景 2. RSA密钥生成2.1 选择素数2.2 计算公钥和私钥2.3 密钥长度与安全性 3 算法原理3.1 加密原理3.2 加密方法3.3 加密示例3.4 代码实现 4. 总结 1. RSA算法介绍 1.2 算法历史与发展 RSA算法由Ron Rivest、Adi Shami…...

教你学习企业高性能web服务器-nginx

一、web服务介绍 1、Apache的三种模型 &#xff08;1&#xff09;Apache prefork 预派生模式&#xff0c;有一个主控制进程&#xff0c;然后生成多个子进程&#xff0c;使用select模型&#xff0c;最大并发1024每个子进程有一个独立的线程响应用户请求相对比较占用内存&…...

封装通用第三方平台用户表(微信开放平台)

文章目录 一. 注册微信开放平台1.1 开发者资质认证1.2 应用申请1.3 配置应用 二.通用数据库表设计三.入库实体类四. 对接第三方平台4.1 微信开放平台VO对象4.2 通用方法 我们的系统可能要对接很多第三方系统&#xff0c;为了便利用户授权使用和对多平台账户的管理。有必要设计通…...

【C++】_string类字符串详细解析(1)

假如没有给你生命&#xff0c;你连失败的机会都没有。你已经得到了最珍贵的&#xff0c;还需要抱怨什么!&#x1f493;&#x1f493;&#x1f493; 目录 ✨说在前面 &#x1f34b;知识点一&#xff1a;什么是string&#xff1f; •&#x1f330;1.string类的概念 •&#x1…...

【Linux】——进程概念(万字解读)

一 冯诺依曼体系结构 在此之前&#xff0c;我们先要理解我们计算机的冯诺依曼体系结构&#xff0c;因为是进程的基础 我们所有的操作其实都是基于这样一个模型&#xff0c;比如你在qq上&#xff0c;和别人发送消息&#xff0c;这个消息肯定是先通过输入设备进行输入&#xf…...

03 serv00搭建WordPress

第一步 下载 serv00 官方教程 按官方教程下载 WordPress 压缩包&#xff0c;解压&#xff0c;将 WordPress 项目文件夹重命名为 public_html&#xff08;先删除原来的 public_html&#xff09; ‍ 第二步 安装 完成以上步骤后访问你的网站&#xff0c;开始安装 WordPress …...

伪共享问题如何解决?

伪共享问题是多核处理器环境下常见的性能瓶颈之一&#xff0c;特别是在多线程编程中。想要解决它&#xff0c;就必须先了解缓存行的概念。 缓存行 缓存行是指在 CPU 缓存中最小的数据单位&#xff0c;通常包含一定数量的字节&#xff08;例如&#xff0c;常见的缓存行大小为 …...

【Midjourney v8审美跃迁指南】:20年AI视觉专家亲授8大不可逆的艺术判断法则

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney v8审美跃迁的本质动因 Midjourney v8 的审美跃迁并非单纯模型参数堆叠的结果&#xff0c;而是多维度协同演化的系统性突破。其核心动因植根于训练数据范式的重构、隐空间解耦能力的增强&am…...

Godot游戏开发:模块化系统集成与事件驱动架构实战

1. 项目概述与核心价值如果你正在用Godot引擎做游戏&#xff0c;尤其是那种玩法稍微复杂一点的&#xff0c;比如RPG、策略游戏或者带点模拟经营元素的&#xff0c;那你肯定遇到过这样的问题&#xff1a;每次开新项目&#xff0c;都得从零开始搭一套基础系统。角色状态管理、物品…...

WechatSogou:基于搜狗微信搜索的公众号数据采集解决方案实战指南

WechatSogou&#xff1a;基于搜狗微信搜索的公众号数据采集解决方案实战指南 【免费下载链接】WechatSogou 基于搜狗微信搜索的微信公众号爬虫接口 项目地址: https://gitcode.com/gh_mirrors/we/WechatSogou 在微信公众号生态日益繁荣的今天&#xff0c;如何高效、稳定…...

卡梅德生物技术快报|噬菌体肽库展示技术:细胞穿透肽筛选全流程技术实现

1. 问题背景&#xff08;技术痛点&#xff09; 细胞递送领域面临三大技术瓶颈&#xff1a; 穿透肽靶向性差&#xff0c;非特异性结合严重&#xff1b;传统筛选流程复杂&#xff0c;周期长、通量低&#xff1b;缺乏标准化验证体系&#xff0c;实验难以复现。噬菌体肽库展示技术…...

FCOS训练自己的数据?从Labelme标注到VOC格式转换,这份避坑指南请收好

FCOS训练自定义数据集&#xff1a;从Labelme标注到VOC格式的完整避坑指南 当你已经用Labelme完成了图像标注&#xff0c;却卡在数据格式转换这一步时&#xff0c;这篇文章将成为你的救星。FCOS作为一款优秀的全卷积目标检测模型&#xff0c;对输入数据格式有着严格的要求&#…...

Miniblink49:如何在5分钟内将浏览器内核嵌入你的C++应用?

Miniblink49&#xff1a;如何在5分钟内将浏览器内核嵌入你的C应用&#xff1f; 【免费下载链接】miniblink49 a lighter, faster browser kernel of blink to integrate HTML UI in your app. 一个小巧、轻量的浏览器内核&#xff0c;用来取代wke和libcef 项目地址: https://…...

告别网盘下载烦恼:3步解锁9大网盘高效下载新体验

告别网盘下载烦恼&#xff1a;3步解锁9大网盘高效下载新体验 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 …...

如何快速部署开源捉妖雷达Web版:面向新手的完整实时妖怪追踪指南

如何快速部署开源捉妖雷达Web版&#xff1a;面向新手的完整实时妖怪追踪指南 【免费下载链接】zhuoyao_radar 捉妖雷达 web版 项目地址: https://gitcode.com/gh_mirrors/zh/zhuoyao_radar 捉妖雷达Web版是一款基于现代Web技术开发的实时妖怪追踪工具&#xff0c;专为捉…...

基于RAG与向量数据库的智能网页问答机器人构建实战

1. 项目概述&#xff1a;一个能“读懂”网页的智能问答机器人最近在折腾一个挺有意思的开源项目&#xff0c;叫web-qa-bot。简单来说&#xff0c;它就是一个能自动抓取网页内容&#xff0c;然后像人一样理解、消化&#xff0c;最后回答你问题的智能机器人。想象一下&#xff0c…...

Nordic nRF52832蓝牙串口实战:手把手教你用SDK 15.3.0实现手机与设备双向通信

Nordic nRF52832蓝牙串口开发实战&#xff1a;从SDK配置到双向通信全解析 在嵌入式蓝牙开发领域&#xff0c;Nordic的nRF52832芯片凭借其优异的射频性能和丰富的外设资源&#xff0c;成为物联网设备开发的明星选择。但对于刚接触这款芯片的开发者来说&#xff0c;如何快速实现手…...