自旋锁
在多处理器环境下,用于保护数据。
自旋锁锁住的进程一直旋转,而不是睡眠,因此能够用在中断等禁止睡眠的场景。
示例代码:
spin_lock(shost->host_lock); shost->host_busy++; spin_unlock(shost->host_lock);
信号量
类似于自旋锁,也是保护数据。
但是,如果无法获取信号量时,进程将进入睡眠状态 ⇒ 所以不能在中断中使用。
原子变量
原子变量提供 原子的、不可中断的 操作。如下所示:
atomic_t mapped
内核还提供系列源自变量操作函数:
atomic_add() atomic_sub() atomic_set() atomic_read()