Linux系统包含众多的同步机制,包括一下:
1.信号量(semaphone)
2.自旋锁(spinlock)
3.原子操作(atomic operation)
4.读写(rwlock)
6.seqlock
每种机制应用在不同的场合,这些机制的发展伴随Linux从单处理器到对称多处理器的过渡,从非抢占式内核到抢占式内核的过渡,锁机制越来越有效,也越来越复杂。
一、自旋锁
自旋的意思就是一直循环直到条件满足。自旋锁不会引起调用者的睡眠,如果自旋锁已经被别的执行单元占有,调用者就一直循环查看是否该自旋锁的保持者已经释放了锁。如果不能在很短的时间内获得锁,则无疑会导致CPU效率降低。
相关的函数主要包括如下几个:
spin_lock_init(spinlock_t*)
spin_lock(spinlock_t*)//阻塞获取自旋锁
spin_trylock(spinlock_t*)//非阻塞方式
spin_unlock(spinlock_t*)
spin_lock_irq()
spin_lock_bh(spinlock_t*)