(Linux内核同步机制之自旋锁)
接着讲解自旋锁操作API!
spin_lock_init(x);
该宏用于初始化自旋锁x,自旋锁在真正使用之前必须先初始化,该宏用于动态初始化;
spin_unlock_wait(x)
该宏用于等待自旋锁x变得没有被任何执行单元保持,如果没有任何执行单元保持该自旋锁,该宏立即返回,否则将在循环在那里,直到该自旋锁被释放;
spin_trylock(x)
该宏尽力获得自旋锁lock,如果能立即获得锁,返回真;否则返回假;
spin_lock(lock)
该宏用于获得自旋锁lock,如果能够立即获得,函数马上返回,否则,函数自旋,进行忙等待;
spin_lock_irqsave(lock, flags)
该宏在获得自旋锁的同时把标志寄存器的值保存到变量flags中并关闭本地中断;
spin_lock_irq(lock)
该宏与spin_lock_irqsave类似,只是该宏不保存标志寄存器的值;
spin_lock_bh(lock)
该宏在得到自旋锁的同时关闭本地中断,应用于中断下半部;
spin_unlock(lock)
该宏释放自旋锁lock,它与spin_trylock或spin_lock配对使用,如果spin_trylock返回假,表明没有获得自旋锁,所以不用spin_unlock解锁;
spin_unlock_irqrestore(lock, flags)
该宏释放自旋锁lock的同时,也恢复标志寄存器的值为变量flags保存的值,它与spin_lock_irqsave配对使用。
下篇继续讲解自旋锁操作API。