管道的学习

news2024/11/25 2:51:31

       信号量:线程间有顺序的协调工作;(用来描述可使用的资源个数);

       信号量的个数反应的是资源的数量;

       写线程  ---写资源

       可以写数据的条件

       1.开始时 ,buf空的

       2.读线程 读完了

       读线程 buf充当读资源 、

1.一开始,buf中没有数据可读的

       2.写线程结束

       信号量的机制:

       1.信号量 --- 来描述可使用的资源的个数

       2.P操作 表示使用这个资源;资源个数减 1 

        p操作逻辑:尝试获取资源,有资源可用,直接使用,资源个数减一;如果没有资源可用,此时等待

       3.V操作 表示产生这个资源;资源个数加 1

semaphore

       1、信号量的定义 :

          sem_t            sem;

          信号量的类型     信号量的变量

  

    sem_t sem_w;

       sem_t sem_r;

2、信号量的初始化:

              int sem_init(sem_t *sem, int pshared, unsigned int value);

              功能:将已经定义好的信号量赋值。

              参数:sem 要初始化的信号量

                       pshared = 0 ;表示线程间使用信号量

                                     !=0 ;表示进程间使用信号量

                       value 信号量的初始值,一般无名信号量

                       都是二值信号量,0 1

                       0 表示红灯,进程暂停阻塞

                       1 表示绿灯,进程可以通过执行

              返回值:成功  0

                            失败  -1;

  //写资源

   sem_w

   sem_init(&sem_w,0,1); //1 表示我有一个写资源可用

   sem_t sem_r;

   sem_init(&sem_r,0,0);

3、信号量的PV 操作

          P申请资源  申请一个二值信号量

          V释放资源  释放一个二值信号量

P操作对应函数  sem_wait();

          V操作对应函数  sem_post();

       int sem_wait(sem_t *sem); p操作

       功能:

             判断当前sem信号量是否有资源可用。

                如果sem有资源(==1),则申请该资源,程序继续运行

                如果sem没有资源(==0),则线程阻塞等待,一旦有资源

                则自动申请资源并继续运行程序。

注意:sem 申请资源后会自动执行 sem = sem - 1;

       参数:sem 要判断的信号量资源

       返回值:成功 0

                     失败 -1

int sem_post(sem_t *sem); //V操作

       功能:

             函数可以将指定的sem信号量资源释放

                并默认执行,sem = sem+1;

                线程在该函数上不会阻塞。

       参数:sem 要释放资源的信号量

       返回值:成功 0

                     失败 -1;

4、信号量的销毁

          int sem_destroy(sem_t *sem);

          功能:使用完毕将指定的信号量销毁

          参数:sem要销毁的信号量

          返回值:成功 0

                            失败  -1;

总结:有顺序的进行访问

      信号量机制

       资源的种类 资源的数量 如何抽象?

       站在使用者的角度考

      核心操作:

         P操作   --- 申请资源

      V操作   --- 释放资源

进程间的通信

  进程创建好之后,父子进程的空间 相互独立

  通信的方式:

同一主机

1、古老的通信方式

              管道:无名管道    (1)有名管道    (2)

              信号           (3)

2、IPC对象通信 system v    BSD     suse fedora   kernel.org

              消息队列 (用的相对少,这里不讨论)   (4)

              共享内存(*)最高效                (5)

              信号量集() 信号量                 (6)

不同主机

3、socket通信

              网络通信                            (7)

管道:

无名管道

int pipe(int pipefd[2]);  功能:创建一个管道

 参数:pipefd用来获取 管道的两端 读端pipefd[0]写端pipefd[1]返回值:

      成功 0

      失败 -1 && errno 

管道的特点:

   1.管道大小 65536字节   64k

   2.管道操作特点

     数据读走之后,认为就没了

 写端存在,读端也存在

     管道如果为空,此时可以一直写,直到写满 

写端存在,读端不存在

     此时,写操作,会导致管道破裂

        SIGPIPE 这个信号会使得程序结束

写端存在,读管道

        可以读管道,但是管道中如果没有数据了,此时读操作 阻塞

写端不存在,读管道

        可以读管道,但是管道中如果没有数据了,此时读操作 不阻塞

管道的读写规则:

    1.读端存在,写管道

      管道空:可以写数据

      管道满:会造成-->写阻塞

2.读端不存在,写管道

      系统会给进程发一个信号SIGPIPE(管道破裂)

3.写端存在,读管道

      管道空,读不到数据,这时会造成读操作阻塞

4.写端不存在,读管道

      如果管道中有数据,则读取这些数据!

      如果没有数据,读操作不阻塞,立即返回!

        

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

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

相关文章

Particle Swarm Optimization粒子群算法

目录 1.粒子群算法入门 1.1 简单的优化问题 1.1.1 盲目搜索 1.1.2 粒子群算法流程图 1.1.3 粒子群算法的核心公式 1.1.4 预设参数 1.1.5 初始化粒子的位置和速度 1.1.6 计算适应度 1.1.7 循环体:更新粒子速度和位置 1.1.8 模型改进 2.深入研究粒子群算法 …

开办无人机培训机构,前期需要投入多少?

开办无人机培训机构的前期投入因多种因素而异,主要包括场地租赁、设备购置、师资薪酬、教学材料与课程开发、宣传推广、行政和运营费用,以及资质认证和审批费用等。以下是对这些费用的大致估算: 1. 场地租赁 费用范围:根据所在地…

“论NoSQL数据库技术及其应用”写作框架,软考高级,系统架构设计师

论文真题 随着互联网web2.0网站的兴起,传统关系数据库在应对web2.0 网站,特别是超大规模和高并发的web2.0纯动态SNS网站上已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展…

CentOS系统下安装NVIDIA显卡驱动

一、安装显卡驱动 1.安装依赖项 yum -y install gcc pciutils yum -y install gcc yum -y install gcc-c yum -y install make2.查看内核版本 uname -a3.查看显卡版本 lspci | grep -i nvidia4.屏蔽系统自带的nouveau (1)查看nouveau lsmod | grep nouveau (2)打开blackl…

Java的反射原理

反射允许程序在运行时检查或修改其类、接口、字段和方法的行为。反射主要通过java.lang.reflect包中的类和接口实现,它主要用于以下目的: 在运行时分析类的能力:通过反射,可以在运行时检查类的结构,比如它的方法、构造…

MySQL(二)——CRUD

文章目录 CRUD新增全列插入指定列插入 查询全列查询指定列查询查询字段为表达式表达式不包含字段表达式包含一个字段表达式包含多个字段 补充:别名去重查询排序条件查询 补充:运算符区间查询模糊查询NULL的查询 分页查询 修改删除 CRUD CRUD是指创建&am…

【自动驾驶】ROS中的TF坐标变换(一):静态坐标变换

目录 引子ros中的右手坐标系补充:欧拉角及四元数理解旋转平移操作复合操作 运行坐标变换的例子坐标转换 静态坐标变换-发布坐标系信息创建功能包 静态坐标变换-订阅坐标系信息添加cpp订阅者主文件修改cmakelist文件编译报错的解决方案运行程序进行测试 引子 机器人…

设计模式---构建者模式(Builder Pattern)

构建者模式(Builder Pattern) 是一种创建型设计模式,旨在将复杂对象的构建过程与其表示分离。它允许使用相同的构建过程创建不同的表示。该模式通常用于构建复杂对象,这些对象由多个部分组成或具有多个可选属性。 构建者模式的核…

Labelme的安装与使用教程

文章目录 一、Labelme是什么?二、安装步骤1.新建虚拟环境2.安装Labelme3.Labelme的使用 三、json2yolo 一、Labelme是什么? Labelme是一个用于图像标注的开源工具,可以实现图像标注、语义分割、实例分割等。 本文记录一下labelme的安装与使…

【系统架构设计】系统性能评价(一)

【系统架构设计】系统性能评价(一) 性能指标对计算机对网络对操作系统对数据库管理系统对Web服务器 性能计算MIPS(百万条指令/秒)计算方法峰值计算等效指令速度 性能设计性能评估 性能指标 对计算机 时钟频率(主频) 指计算机处…

搜维尔科技:Varjo XR-4 功能详解:实现业界首个凝视驱动自动对焦系统

对可变焦光学元件的需求 目前,所有其他XR HMD都在视频直通摄像头中使用定焦光学元件,其焦距无法改变。人眼可以辨别高达约 60 像素/度 ( PPD ) 的细节,但定焦光学元件的问题在于,在实践中,它们的分辨率极限约为 30 PP…

ESP8266与阿里云物联网平台连接

前言 最近折腾项目,需要用到ESP8266模块对接阿里云物联网平台,网上感觉十分完善的教程少了一点点,比较折腾我哈哈哈,所以打算自己写一篇。 材料准备 1、ESP8266 WiFi模块 数据线 网上随便买一个就好,十块钱左右一个…

BERT:BidirectionalEncoderRepresentations fromTransformers代码及数据解读

论文地址 写在前面 由于官网给的是TensorFlow版本的,github也有pytorch版本,但是给出的pytorch的代码是需要根据实际情况进行修改的。 词表文件vocab.txt文件读取的问题 vocab.py代码的class WordVocab(Vocab)类中的def load_vocab(vocab_path)函数为…

看看人家都用树莓派5做了什么产品?

文章作者: Aleksandar Dakić 原文地址: https://magazinmehatronika.com/edatec-ed-hmi3020-070c-hmi-recenzija/ Aleksandar Dakić《机电一体化》的杂志主编,同时Aleksandar 也是《机电一体化》杂志的创始人。拥有电气工程背景&#x…

MySQL的安装及配置远程链接(WindowsLinux下安装)

一.Windows下安装 在Windows下安装MySQL需要先去官网下载一下安装包 1. 官网下载地址:www.mysql.com 2、选择下载 往下滑选择MySQL 社区 (GPL) 下载 3、选择社区版适配Windows系统 MySQL Installer for Windows 4、选择本地安装版本 my…

十五年以来 — 战略性云平台服务的演进路径之全面呈现(含亚马逊、微软和谷歌)

Gartner每年都发布对全球IaaS平台进行评估的魔力象限报告。2023年底,Gartner将此项评估的名称改为“战略性云平台服务”(Strategic cloud platform services),尽管其核心仍为IaaS,但是,毫无疑问&#xff0c…

算法工程师必知必会的数学基础之微积分下篇

系列文章: 第一篇:算法工程师必知必会的数学基础之线性代数第二篇:算法工程师必知必会的数学基础之微积分上篇第三篇:算法工程师必知必会的数学基础之微积分下篇(本文) 文章目录 2. 微积分2.7 泰勒级数&am…

【大模型从入门到精通24】开源库框架LangChain Embedding的力量1

这里写目录标题 嵌入的力量什么是嵌入?创建嵌入的详细过程嵌入在语义搜索中的应用向量存储:相似向量的有效检索关键特性与操作选择向量存储的标准示例:Chroma 适用于快速原型开发和小型数据集结论 嵌入的力量 什么是嵌入? 嵌入是…

通过CLIP引导解码减轻大型视觉-语言模型中的幻觉问题

人工智能咨询培训老师叶梓 转载标明出处 大型视觉-语言模型(LVLMs)因其在视觉推理方面的能力而备受瞩目,被视为实现自主操作智能体的重要里程碑。但它在生成文本时容易出现对象幻觉问题,即描述中包含不存在的对象,这严…

一文带你入门大模型微调

大模型相关目录 大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步,扬帆起航。 swift与Internvl下的多模态大模型分布式微调指南(附代码和数据&#xff…