菜单
  


    自旋锁的初衷:在短期间内进行轻量级的锁定。一个被争用的自旋锁使得请求它的线程在等待锁重新可用的期间进行自旋(特别浪费处理器时间),所以自旋锁不应该被持有时间过长。如果需要长时间锁定的话, 最好使用信号量。

    单处理器的自旋锁:

    首先,自旋锁的目的如果在系统不支持内核抢占时,自旋锁的实现也是空的,因为单核只有一个线程在执行,不会有内核抢占,从而资源也不会被其他线程访问到。

    其次,支持内核抢占,由于自旋锁是禁止抢占内核的,所以不会有其他的进程因为等待锁而自旋.

    最后,只有在多cpu下,其他的cpu因为等待该cpu释放锁,而处于自旋状态,不停轮询锁的状态。所以这样的话,如果一旦自旋锁内代码执行时间较长,等待该锁的cpu会耗费大量资源,也是不同于信号量和互斥锁的地方。

    简单来说,自旋锁在内核中主要用来防止多处理器中并发访问临界区,防止内核抢占造成的竞争。

     

    自旋锁内睡眠禁止睡眠问题:如果自旋锁锁住以后进入睡眠,而此时又不能进行处理器抢占(锁住会disable prempt),其他进程无法获得cpu,这样也不能唤醒睡眠的自旋锁,因此不相应任何操作。

    自旋锁为什么广泛用于内核:自旋锁是一种轻量级的互斥锁,可以更高效的对互斥资源进行保护。自旋锁本来就只是一个很简单的同步机制,在SMP之前根本就没这个东西,一切都是Event之类的同步机制,这类同步机制都有一个共性就是:一旦资源被占用都会产生任务切换,任务切换涉及很多东西的(保存原来的上下文,按调度算法选择新的任务,恢复新任务的上下文,还有就是要修改cr3寄存器会导致cache失效)这些都是需要大量时间的,因此用Event之类来同步一旦涉及到阻塞代价是十分昂贵的,而自旋锁的效率就远高于互斥锁。

     

    在Linux内核中何时使用spin_lock,何时使用spin_lock_irqsave很容易混淆。首先看一下代码是如何实现的。

    spin_lock

       spin_lock  ----->  raw_spin_lock 

     

    1 static inline void __raw_spin_lock(raw_spinlock_t *lock)  

    2 {  

    3         preempt_disable();  

    4         spin_acquire(&lock->dep_map, 0, 0, _RET_IP_);  

    5         LOCK_CONTENDED(lock, do_raw_spin_trylock, do_raw_spin_lock);  

    6 }   

    1. 只禁止内核抢占,不会关闭本地中断

     

    2. 为何需要关闭内核抢占:假如进程A获得spin_lock->进程B抢占进程A->进程B尝试获取spin_lock->由于进程B优先级比进程A高,先于A运行,而进程B又需要A unlock才得以运行,这样死锁。所以这里需要关闭抢占。 这个原理RTOS的mutex/semaphore是否相同?

     

      a. 因为ThreadX的semaphore,假如进程B获取sema失败,会一直等待,直到A进程释放,不会死锁。 

     

      b. Mutex: mutex获取一旦失败,进程会进入sleep,直到其他进程释放;而spin_lock则不同,会一直轮训访问,且直到时间片耗完。

     

    spin_lock_irq

        spin_lock_irq------> raw_spin_lock_irq

     

    1 static inline void __raw_spin_lock_irq(raw_spinlock_t *lock)  

    2 {  

    3         local_irq_disable();  

    4         preempt_disable();  

  1. 上一篇:校园网络设备选型方案
  2. 下一篇:telnet towel.blinkenlights.nl
  1. 投资和创业哪个更赚钱,...

  2. 属马的和什么属相最配相...

  3. 属虎的和什么属相最配相...

  4. 属虎的和什么属相最配相...

  5. 属猪的和什么属相最配相...

  6. 天秤男喜欢撒娇的還湜强...

  7. 为什么经商的女人不能要...

  8. 货币国际化国内外研究现状

  9. Toeplitz定理及其应用+文献综述

  10. 街头游园设计

  11. 多级反馈队列调度算法的研究+源代码

  12. 甲硫醇钠生产工艺设计任务书

  13. 运动员广告形象塑造文献综述和参考文献

  14. 从何红舟《桥上的风景》中感受油画构成美

  15. 身体自尊量表(PSPP)

  16. 玫瑰精油特征香气成分研究

  17. 进出口贸易与经济增长文献综述和参考文献

  

About

优尔论文网手机版...

主页:http://www.youerw.com

关闭返回