自旋锁
三种实现
- 经典实现 (2.4.20)
- ticket实现 (2.6.34)
- qspinlock实现 (5.15.15)
经典实现 (2.4.20)
./include/asm-x86_64/spinlock.h
typedef struct {
volatile unsigned int lock;
} spinlock_t;
#define spin_lock_string \
"\n1:\t" \
"lock ; decb %0\n\t" \
"js 2f\n" \
".section .text.lock,\"ax\"\n" \
"2:\t" \
"cmpb $0,%0\n\t" \
"rep;nop\n\t" \
"jle 2b\n\t" \
"jmp 1b\n" \
".previous"
static inline void spin_lock(spinlock_t *lock)
{
__asm__ __volatile__(
spin_lock_string
:"=m" (lock->lock) : : "memory");
}
#define spin_unlock_string \
"movb $1,%0"
static inline void spin_unlock(spinlock_t *lock)
{
__asm__ __volatile__(
spin_unlock_string
:"=m" (lock->lock) : : "memory");
}
ticket实现 (2.6.34)
qspinlock实现 (5.15.15)