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

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

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)
返回列表