spin lock在单cpu(UP)系统上无效。在多处理器(MP), 分内核抢占和非抢占两种,
BUILD_LOCK_OPS
定义了抢占式内核的spin lock:
1. 调用prempty_disable禁止抢占
2. 调用_raw_spin_trylock()(原子调用), 检查自旋锁的slock字段是否为一,并设该字段为0,如果为1,获得内核锁,否则
3. 开始循环等
4. 调用prempty_enable, 使能抢占
5. 检查自旋锁的break_lock字段是否为1, 非, 设为1,
6. 如果不能得到锁, 且break_lock还是等于1, 继续等, 否则
7. 调用prempty_disable禁止抢占
8. 重复步骤2.
cond_resched_lock() 将设break_lock等于0
spin unlock: 原子地设slock字段为0.
且调用prempty_enable使能抢占