《现代操作系统》阅读笔记——竞争与加锁

本文详细探讨了操作系统中多线程、多进程访问共享资源时的竞争问题,介绍了自旋锁、信号量、互斥量等解决方法,以及在多处理器环境下硬件支持的角色。通过对经典算法的分析,阐述了如何避免死锁和优先级反转,强调了正确使用同步机制的重要性。
摘要由CSDN通过智能技术生成

竞争

  • 竞争发生在当多线程或者进程同时访问同一个内存以及别的共享资源,但是执行的顺序有交叉时。
  • 一般来说,局部变量和参数由于对每个线程是独立的,不会发生竞争。竞争通常发生在全局变量,堆变量等上。
  • 临界区: 程序中共享内存在执行时会被访问的部分

被否决的解决方案

  • 屏蔽中断

    • 解决竞争最简单的方法就是进入临界区(开始读写公共内存)时屏蔽掉中断,但是这种方法对于多CPU无效,因为该内存可能会被别的CPU中的程序访问。现在更好的方法是屏蔽那片内存的访问(以前是通过锁住总线解决的)。但是还是会有问题,因为这样也屏蔽了时钟中断,可能会陷入死锁
  • 锁变量

    • 第二种想法就是加锁,但是在程序级别简单的加锁是没用的,因为加锁需要先测试相等,然后增加或减少锁变量两个步骤,这之间可能也会存在竞争。所以要么在硬件层面实现原子操作的加锁(TSL),要么使用下面的算法。

忙等待的互斥

  • 自旋锁

    • 自旋锁就是在测试变量不处理的时候进行忙等待。这种方法是假设忙等待的时间很短,一般在内核中使用。和别的方法比优点在于不用切换进程。在早期没有硬件支持的时候,有严格轮换法和Peterson算法两种程序级别的解决方案,但是现在有了硬件级别的TSL操作,更加简单了
      • 注意含TSL的算法和Peterson遇到进程有优先级时都会遇到因为优先级反转而死锁的现象。
      • </
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值