自旋锁

三种实现

  • 经典实现 (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)

results matching ""

    No results matching ""