「Linux」- TMP

自旋锁

在多处理器环境下,用于保护数据。

自旋锁锁住的进程一直旋转,而不是睡眠,因此能够用在中断等禁止睡眠的场景。

示例代码:

spin_lock(shost->host_lock);
shost->host_busy++;
spin_unlock(shost->host_lock);

信号量

类似于自旋锁,也是保护数据。

但是,如果无法获取信号量时,进程将进入睡眠状态 ⇒ 所以不能在中断中使用。

原子变量

原子变量提供 原子的、不可中断的 操作。如下所示:

atomic_t mapped

内核还提供系列源自变量操作函数:

atomic_add()
atomic_sub()
atomic_set()
atomic_read()