![Rank: 8](images/default/star_level3.gif) ![Rank: 8](images/default/star_level3.gif)
- UID
- 872238
|
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) |
|