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

2024年8月16日嵌入式学习

今日复习信号量的知识点和学习了进程间通信和管道

总结信息量:


   共享进程资源 方便 
   线程 抢占公共资源 带来的问题 


   1. 互斥访问 


      需要互斥锁 来保障 原子性操作 
      使 操作过程 完整
      
       互斥锁:
       a.初始化 锁   
       b.加锁  //使用资源之前 
       c.解锁  //用完之后 
       d.销毁 锁        


   2. 有顺序的进行访问


      信号量机制 
   
       资源的种类 资源的数量 如何抽象?
       站在使用者的角度考虑        
        
        
      核心操作:
      P操作   --- 申请资源 
      V操作   --- 释放资源 

进程间通信

通信的7种方式:


  //同一主机
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.lryc.cn/news/425441.html

相关文章:

  • vue+ckEditor5 复制粘贴wold文字+图片并保存格式
  • redis列表若干记录
  • 固态硬盘用mbr还是GPT?固态硬盘分区类型用mbr还是GPT分析
  • http/sse/websocket 三大协议演化历史以及 sse协议下 node.js express 服务实现打字机案例 负载均衡下的广播实现机制
  • 智能时代新宠:2024年录音转文字软件
  • 【Python机器学习】树回归——使用Python的tkinter库创建GUI
  • 谷歌浏览器网页底图设置为全黑
  • Unity | AmplifyShaderEditor插件基础(第二集:模版说明)
  • 【Linux入门】Linux常见指令
  • startData
  • CV每日论文--2024.7.24
  • 大语言模型的简易可扩展增量预训练策略
  • python学习之异常
  • 多张图像实现全景无痕拼接操作
  • 在阿里云ecs上构建一个WordPress博客网站
  • 安卓应用开发学习:查看手机传感器信息
  • C语言字符串缺陷
  • 分布式场景中的常见的技术问题及解决,如分布式锁、分布式事务、分布式 session、分布式任务调度
  • Android笔试面试题AI答之Kotlin(9)
  • C# 不一样的洗牌算法---Simd指令
  • LVGL系列3--纯物理(外部)按键,数字键盘控制控件
  • FPGA开发——UART回环实现之接收模块的设计
  • Debezium系列之:记录一次SQLServer数据库数据不采集,恢复采集造成下游承压的情况,以及相对应的详细解决方案
  • Linux线程基础学习记录
  • 【Python学习-UI界面】PyQt5 小部件12-QStackedWidget 多页显示
  • Mybatis中好用的元对象反射工具类 - MetaObject
  • javaEE WebServlet、SpringWebMVC、SpringBoot实现跨域访问的4种方式及优先级,nginx配置跨域
  • 深入理解JavaScript性能优化:从基础到高级
  • java+springboot实现定时任务
  • 1.3 数据库的发展历史与演变