有时候,就是想窥视一下不知道的东东,因为好奇!
分类: LINUX
2011-02-12 23:29:50
自旋锁
1.自旋锁(spin lock)
处理复杂的临界区,如结构体的更新时,需要锁来提供保护。
自旋锁是为多处理器环境设计的一种特殊的锁机制,它最多只能被一个可执行路径“锁着”。
如果内核控制路径发现锁状 态是”open”,则获得锁,并继续自己的执行。相反,如果内核控制路径发现,锁由运行在另一个CPU上的内核控制路径”锁着”,就在周围“旋转”,反复执行一条紧凑的循环指令,直到锁被释放。
自旋锁的循环指令表示“忙等”,即使等待的内核控制路径无事可做,它也在CPU上保持运行。忙等期间,内核抢占还是有效的,等待自旋锁的进程有可能被更高的优先级的进程替代。
在单处理器上,自旋锁仅仅是禁止或启用内核抢占。
2.linux内核中的自旋锁
初始化自旋锁
spinlock_t mylock = SPIN_LOCK_UNLOCKED;
spin_lock_init(spinlock_t *lock)
加锁函数
spin_lock(spinlock_t *lock)
spin_lock_irqsave(spinlock_t *lock, unsigned long flags)
spin_lock_irq(spinlock_t *lock)
spin_lock_bh(spinlock_t *lock)
解锁函数
spin_unlock(spinlock_t *lock)
spin_unlock_irqsave(spinlock_t *lock, unsigned long flags)
spin_unlock_irq(spinlock_t *lock)
spin_unlock_bh(spinlock_t *lock)
非阻塞的自旋锁
spin_trylock(spinlock_t *lock)
spin_trylock_bh(spinlock_t *lock)