1 在单处理器上的实现
单核系统上,不存在严格的并发,因此对资源的共享主要是多个任务分时运行造成的。
只要在某一时段,停止任务切换,就能够保证只有一个任务在运行。
这就是spinlock的实现机制。
1: #define __LOCK(lock) \
2: do { preempt_disable(); __acquire(lock); (void)(lock); } while (0)
1: #define _raw_spin_lock(lock) __LOCK(lock)
1: static inline void spin_lock(spinlock_t *lock)
2: {
3: raw_spin_lock(&lock->rlock);
4: }
1: #define __UNLOCK(lock) \
2: do { preempt_enable(); __release(lock); (void)(lock); } while (0)
即基本上就是调用preempt_disable和preempt_enable。