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

Linux:System V - 信号量

1.信号量是什么?
本质上是一个计数器,通常用来表示公共资源中,资源数量使用情况;
公共资源:被多个进程同时可以访问的资源(管道、消息队列、共享内存、信号量)
访问没有保护的公共资源:数据不一致问题(数据在没被完全写入时就被读取)
2.暂停:为什么要让不同的进程看到同一份资源呢?—因为需要通信,想让进程间实现协同,又因为进程具有独立性,所以得让它们看见同一份资源,这样又会有数据不一致的问题。
3.我们未来将被保护起来的资源叫做临界资源。但是 有大部分资源都是独立的。
资源(内存、文件、网络等)是要被使用的,如何被进程使用呢?一定是该进程有对应的代码来访问资源的,而访问临界资源的代码称为临界区,不访问的代码称为非临界区。
4.如何对资源进行保护:同步和互斥(当有两个进程访问同一个公共资源时只能其中一个去访问)。
原子性:只有两态,要做就做完、要么不做,数据完整才有意义。
信号量就是为了解决让多进程/多线程之间进行协同,原子性的互斥和同步;信号量是其中一种方案。5.为什么要有信号量?
公共资源有两种使用方式:1.整体使用 ; 2.拆开去使用
公共资源被分为很多部分,定义信号量,当进程访问前先预订资源sem--,之后可以访问这部分公共资源;当使用完毕sem++。所有进程要访问公共资源之前,要先申请信号量,先申请信号量必须让这些进程要先看到信号量(信号量本身也是公共资源),信号量怎么保护自己的安全?—信号量的++(v操作)和--(p操作)操作是原子的。只有两种状态的信号量称为二元信号量—提供互斥功能(共享资源只有一份)。

同时对多个信号量进行PV操作;操作几个信号量就定义多少个struct sembuf并在结构体中定义操作方式。

进程间通信


http://www.kler.cn/a/506454.html

相关文章:

  • thinkphp6 + redis实现大数据导出excel超时或内存溢出问题解决方案
  • [系统安全] 六十一.恶意软件分析 (12)LLM赋能Lark工具提取XLM代码的抽象语法树(初探)
  • Yolov8 目标检测剪枝学习记录
  • RV1126+FFMPEG推流项目(7)AI音频模块编码流程
  • Windows 正确配置android adb调试的方法
  • 《机器学习》——DBSCAN算法
  • 基于API接口的电商数据可视化探索与实践
  • 论文笔记-arXiv2025-A survey about Cold Start Recommendation
  • [RabbitMQ] RabbitMQ运维问题(RabbitMQ完结)
  • 刷刷题刷题刷题
  • 学成在线_内容管理模块_创建模块工程
  • Linux安装docker,安装配置xrdp远程桌面
  • 基于JavaEE的超市外卖系统的设计与实现_springboot+vue
  • 使用贪心算法解决最小生成树问题
  • 记录一次微信小程序使用云能力开发的过程
  • java8新特性-1
  • 399. 除法求值【 力扣(LeetCode) 】
  • 关于Nvidia显卡在windows系统下存在部分软件屏闪/闪烁问题与解决方法
  • k8s集群换IP
  • mac配置 iTerm2 使用lrzsz与服务器传输文件
  • kotlin中的flow使用,Flow跟生命周期结合
  • 大数据组件常用端口(hdfs端口、hive端口、yarn端口)
  • HTML5教程(中)
  • ubuntu20.04的虚拟机突然打不开terminal了
  • springweb项目练手附spring学习笔记链接
  • element-ui textarea备注 textarea 多行输入框