zoukankan      html  css  js  c++  java
  • 自旋锁

    自旋锁

    标签(空格分隔): 操作系统


    1. 什么是自旋锁

    • 自旋锁是为了实现保护共享资源而提出的一种机制, 其实自旋锁和互斥锁比较类似, 他们都是为了解决对某项资源的互斥使用。无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者,也就说,在任何时刻最多只能有一个执行单元获得锁。

    2. 调度机制

    • 对于互斥锁,如果资源已经被占用,资源申请者只能进入睡眠状态。但是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名。

    3. 优缺点

    • 根据调度机制可以看出自旋锁是一种比较蠢的保护共享资源的方式, 该种方法可能会造成死锁,和过多占用CPU资源的问题.

    3.1 死锁

    • 试图递归的获得同一个自旋锁一定会造成死锁 , 所以在设计的时候应该避免如下情况: 1. 递归程序不能再持有自旋锁的时候调用自己, 这样就造成了递归调用同一个自旋锁的情况. 2. 如果另外一个进程已经将资源锁定,那么即使其他申请这个资源的进程如何疯狂的"自旋"也不会获得资源(一直通过不断地递归 造成更多的自旋,去等待锁的释放),从而进入死循环.

    3.2 过多占用资源

    • 过多的占用CPU资源. 如果不加限制的话, 很多的程序在那里循环等待尝试. 因此自旋锁的实现会有一个参数指定最多尝试次数, 如果超过了则会放弃当前的时间片,等待下一次机会.

    4. 互斥锁和自旋锁搭配优化

    • 自旋锁适用于 任务完成非常快, 锁的持有者更换速度很高的情况下使用 . 互斥锁适用于 任务量比较大, 锁的持有者更滑比较慢的情况. 为了折中处理, 我们可以在实际的互斥锁之前让其先自旋一段时间, 如果超过时间阈值, 则进入睡眠状态 . 这样既兼顾到了锁的切换效率, 又减轻了CPU的压力.
  • 相关阅读:
    实用小软件
    没有找到MSVCP71.dll,迅雷5无法进行离线下载,P2P Seacher无法连入emule网络
    PSP2000V3版5.03系统误删PSP文件夹的拯救方案
    图书馆图书检索的小技巧
    thinkpad指点杆(trackpoint)在WPS的word文档中失效的解决办法
    笔记本电池死而复生
    调试Page.IsPostBack,感觉好奇怪
    OleDbSchemaGuid.Columns返回DataTable介绍
    静态类生命周期的问题
    IE中居中,FF中出问题
  • 原文地址:https://www.cnblogs.com/A-FM/p/11440650.html
Copyright © 2011-2022 走看看