-自旋锁
一、自旋锁概念
自旋锁实现在多处理器情况下保护临界区。自旋锁实际上是忙等待锁,被自旋锁保护的临界区代码执行时不能进入睡眠状态,他不能因为任何原因放弃处理器,除了服务中断;被自旋锁保护的临界区代码执行时,内核不能被抢占。
单CPU不支持内核抢占→空操作;
单CPU并支持内核抢占→对内核抢占功能的打开和关闭;
SMP系统上,不仅对内核抢占的禁止,还需要在内存加一个标志,每个需要进入临界区的代码都必须检查这个标志,看临界区中是否有进程。
在Linux中,每个自旋锁都用spinlock_t表示:
内核提供了以下与自旋锁有关的宏:
spin_lock_init:对标识位初始化,将自旋锁设置为1,表示有一个资源可用。
spin_lock:循环等待直到自旋锁解锁(置为1),然后将自旋锁锁上(置为0)。
spin_is_locked:如果自旋锁被设置为1,