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

进程间的同步与互斥

1、计数信号量及其初始化

由于事件发生的次数可能不止一次,或者资源可用的数量可能不止一个,因此,信号量内部会维护一个计数器,用于表示某种事件发生的次数或者某种资源可用的数量。

信号量至少提供两种操作:一种等待信号,一种发送信号

如果信号计数=0,则进程等待;否则,计数减1,进程继续执行。

2、发送和等待信号

1)等待信号:对于等信号量而言,如果事件或资源的计数不为0,则说明事件已经发生或者资源是可用的,所以不需要等,而如果为0,则需要等待,进程不能继续往下运行。因此,需要将进程从就绪队列中移除,同时放置到信号量的等待队列等。

2)发送信号:当事件发生或者资源可用时,如果有进程在队列中等,则唤醒一个进程让其可以继续往下运行。处理方式很简单,只需要将其回插到就绪队列中,这样进程就可以继续执行了。而如果没有进程在等,则简单的将计数值+1

等待队列的排序顺序设置比较简单,当事件发生或资源可用时,最先等待的进程最先获得事件的处理权。没有基于进程的优先级进行排序。

3、互斥锁

前面通过cli和sti指令就可以快速地开关中断,进而关掉定时中断。防止进程切换。这是不太明智的。因此采用互斥锁来解决

在操作系统中,进程在进入临界区时,首先要获取这把锁,然后才能进入临界区。如果这把锁被其它进程占用了,那么此时就会类似信号量那样,在锁上进行等待;直到其它进程释放了锁之后,进程获得锁,才能继续往下运行

1)上锁

2)释放锁

如果多个进程均以只读的方式访问共享资源,那么不需要进行保护,因为资源的状态总是不变的。


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

相关文章:

  • 根据子网前缀的长度计算ip范围
  • Python知识点:如何使用MongoDB与PyMongo进行NoSQL数据库操作
  • 零基础5分钟上手亚马逊云科技-基础设施即代码开发
  • 深入理解Java代理模式:从静态到动态的实现与应用
  • [000-01-011].第2节:持久层方案的对比
  • 更新RK3588开发板的rknn_server和librknnrt.so【这篇文章是RKNPU2从入门到实践 --- 【5】的配套文章】
  • 服务器在插入一个新的磁盘后需要做的操作(仅限新盘)
  • 揭秘无线领夹麦克风五大行业隐秘:音质失真、隐私泄露需警惕!
  • 搜维尔科技:使用MANUS VR手套控制特斯拉机器人叠衣服操作
  • 同模块下的ability之间的跳转
  • HTML5 浏览器支持
  • android gradle特别慢
  • 计算机网络常见面试题总结
  • 面经:什么是Transformer位置编码?
  • 【算法题】机试指南-数据结构进阶篇
  • C++/Qt 多媒体(续二)
  • Vue——认识day02
  • Docker部署独立版Milvus向量数据库
  • C# 实现傅里叶变化(DFT)
  • Marked: 一款高效、轻量级且全功能的Markdown解析器