内核自旋锁API

1.1 关于自旋锁API

  内核中,已经封装好了很多的自旋锁api,我们只需要在内核的开发当中,调用这些API即可。

1)spin_lock_init(x)
        该宏用于初始化自旋锁x。自旋锁在真正使用前必须先初始化。该宏用于动态初始化。

2)DEFINE_SPINLOCK(x)
        该宏声明一个自旋锁x并初始化它。该宏在2.6.11中第一次被定义,在先前的内核中并没有该宏。

3)SPIN_LOCK_UNLOCKED
        该宏用于静态初始化一个自旋锁。

4)DEFINE_SPINLOCK(x)等同于spinlock_t x = SPIN_LOCK_UNLOCKEDspin_is_locked(x)
        该宏用于判断自旋锁x是否已经被某执行单元保持(即被锁),如果是,返回真,否则返回假。

5)spin_unlock_wait(x)
        该宏用于等待自旋锁x变得没有被任何执行单元保持,如果没有任何执行单元保持该自旋锁,该宏立即返回,否则将循环在那里,直到该自旋锁被保持者释放。

6)spin_trylock(lock)
        该宏尽力获得自旋锁lock,如果能立即获得锁,它获得锁并返回真,否则不能立即获得锁,立即返回假。它不会自旋等待lock被释放。

7)spin_lock(lock)
        该宏用于获得自旋锁lock,如果能够立即获得锁,它就马上返回,否则,它将自旋在那里,直到该自旋锁的保持者释放,这时,它获得锁并返回。总之,只有它获得锁才返回。

8)spin_lock_irqsave(lock, flags)
         该宏获得自旋锁的同时把标志寄存器的值保存到变量flags中并失效本地中断。

9)spin_lock_irq(lock)
         该宏类似于spin_lock_irqsave,只是该宏不保存标志寄存器的值。

10)spin_lock_bh(lock)
         该宏在得到自旋锁的同时失效本地软中断。

11)spin_unlock(lock)
         该宏释放自旋锁lock,它与spin_trylockspin_lock配对使用。如果spin_trylock返回假,表明没有获得自旋锁,因此不必使用spin_unlock释放。

12)spin_unlock_irqrestore(lock, flags)
         该宏释放自旋锁lock的同时,也恢复标志寄存器的值为变量flags保存的值。它与spin_lock_irqsave配对使用。

13)spin_unlock_irq(lock)
         该宏释放自旋锁lock的同时,也使能本地中断。它与spin_lock_irq配对应用。

14)spin_unlock_bh(lock)
         该宏释放自旋锁lock的同时,也使能本地的软中断。它与spin_lock_bh配对使用。

15)spin_trylock_irqsave(lock, flags)
        该宏如果获得自旋锁lock,它也将保存标志寄存器的值到变量flags中,并且失效本地中断,如果没有获得锁,它什么也不做。因此如果能够立即获得锁,它等同于spin_lock_irqsave,如果不能获得锁,它等同于spin_trylock。如果该宏获得自旋锁lock,那需要使用spin_unlock_irqrestore来释放。

16)spin_trylock_irq(lock)
         该宏类似于spin_trylock_irqsave,只是该宏不保存标志寄存器。如果该宏获得自旋锁lock,需要使用spin_unlock_irq来释放。

17)spin_trylock_bh(lock)
        该宏如果获得了自旋锁,它也将失效本地软中断。如果得不到锁,它什么也不做。因此,如果得到了锁,它等同于spin_lock_bh,如果得不到锁,它等同于spin_trylock。如果该宏得到了自旋锁,需要使用spin_unlock_bh来释放。

18)spin_can_lock(lock)
        该宏用于判断自旋锁lock是否能够被锁,它实际是spin_is_locked取反。如果lock没有被锁,它返回真,否则,返回假。该宏在2.6.11中第一次被定义,在先前的内核中并没有该宏。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值