Board logo

标题: Linux内核同步机制的自旋锁原理及应用 02 [打印本页]

作者: samwalton    时间: 2013-8-29 14:55     标题: Linux内核同步机制的自旋锁原理及应用 02

Lock为0时可以用,1是等待。0像锁孔,当没有钥匙插进去时,它才可以插进去怎么初始化呢?
   
    #define spin_lock_init(x)
   
    do {
   
    (x)->magic = SPINLOCK_MAGIC;
   
    (x)->lock = 0;                ;0初始化,表示可用
   
    (x)->babble = 5;
   
    (x)->module = __FILE__;
   
    (x)->owner = NULL;
   
    (x)->oline = 0;
   
    } while (0)
   
    定义一个自旋锁的方法很有意思,
   
    Spinlock_t lock=?????
   
    可以通过spin_lock
   
    Spin_lock_irqsave 来调用自旋锁,后者不允许中断。前者有可能在上锁中发生中断。
   
    还有spin_trylock 这是一个绝不妥协的函数,它不等待。
   
    恢复为spin_unlock
   
    Spin_unlock_irqrestore
   
    考查下面代码
   
    #define spin_lock_irqsave(lock, flags) _spin_lock_irqsave(lock, flags)
   
    #define _spin_lock_irqsave(lock, flags)
   
    do {
   
    local_irq_save(flags);       保存中断请求标志
   
    preempt_disable();          不允许抢占
   
    _raw_spin_lock(lock);
   
    __acquire(lock);
   
    } while (0)




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0