linux spin_lock

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使能抢占














你可能感兴趣的:(linux spin_lock)