首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Linux内核同步机制的自旋锁原理及应用

Linux内核同步机制的自旋锁原理及应用

一、自旋锁
   
    自旋锁是专为防止多处理器并发而引入的一种锁,它在内核中大量应用于中断处理等部分(对于单处理器来说,防止中断处理中的并发可简单采用关闭中断的方式,即在标志寄存器中关闭/打开中断标志位,不需要自旋锁)。
   
    自旋就是自己连续的循环等待。如果你有抱着你的爱人旋转的经历,那么你应该知道一件事情,为了安全,你不能旋转太久,你的爱人如果头昏,也想你早日释放。是的,自旋的缺点,就是它频繁的循环直到等待锁的释放,将它用于可以快速完成的代码中才好。
   
    自旋不能抢占,但能中断。
   
    相关话题:SMP和cpu.多个cpu和单个cpu.很多书说自旋锁只能在多处理机中使用,这是不正确的。
   
    首先定义
   
    Spinlock_t lock;
   
    对不起,我只能找到arm平台的锁了
   
    /*
   
    * armv6 Spin-locking.
   
    *
   
    * We (exclusively) read the old value, and decrement it.  If it
   
    * hits zero, we may have won the lock, so we try (exclusively)
   
    * storing it.
   
    *
   
    * Unlocked value: 0
   
    * Locked value: 1
   
    */
   
    typedef struct {
   
    volatile unsigned int lock;
   
    #ifdef CONFIG_PREEMPT
   
    unsigned int break_lock;
   
    #endif
   
    } spinlock_t;
   
    补上x86平台
   
    #define SPINLOCK_MAGIC 0x1D244B3C
   
    typedef struct {
   
    unsigned long magic;
   
    volatile unsigned long lock;
   
    volatile unsigned int babble;
   
    const char *module;    // 所属模块
   
    char *owner;
   
    int oline;
   
    } spinlock_t;
返回列表