1 SPINLOCK
一开始总是弄不明白,对于单一的CPU ,不可抢占内核,SPINLOCK什么都没做。
原因是: 对于SPINLOCK , 它总是初始化为 SPIN_LOCK_UNLOCKED ,没有SPIN_LOCK_LOCKED 这个宏,
假如有process A , process B
Process A :
spin_lock
do something
spin_unlock
不论process A 或者process B 谁先得到 lock , 他们都可以执行下去,对于不可抢占的单CPU,
假如process A 先得到lock ,它必须执行完了后,才可以切换到process B . 也就是process A 会执行完spin_lock 在do something时候不会中断,然后执行spin_unlock , 所以得到锁的进程必然会释放锁后才切换,因此,SPINLOCK其实什么都可以不做。因为在do something的时候不会被打扰的。
2 seqlock 与 rwlock
rwlock :
这种锁的特点是可以有多个读者同时加锁,并且读者优先于写者,也就是说只要有一个读者在临界区,那么写者就不能进去访问。
而seqlock :
对于写者加锁, 写者优先,读者需要检验是否和写者有冲突。如果冲突,则重来。
2 semaphore completion difference ?
阅读(1918) | 评论(1) | 转发(0) |