Appearance
spinlock.h
TIP
互斥锁 (Mutual exclusion lock)。 自旋锁是一种保护共享数据结构免受多 CPU 并发访问的机制。 当一个 CPU 尝试获取一个已经被持有的锁时,它会进入一个忙等待循环(“自旋”), 直到锁被释放。
struct spinlock {TIP
locked 字段是锁的核心。 它是一个无符号整数,值为 1 表示锁已被持有(locked),值为 0 表示锁可用(unlocked)。 对该字段的修改必须是原子的,以防止竞争条件。 xv6 使用了 GCC 内置的原子操作(如 __sync_lock_test_and_set)来确保原子性。
uint locked;
TIP
--- 以下为调试信息 ---
TIP
为了方便调试,每个锁都可以有一个名字。 这个名字在 initlock 时设置,可以在调试输出中用来识别特定的锁。
char *name;
TIP
cpu 字段记录了当前持有该锁的 CPU 的指针。 当一个 CPU 成功获取锁时(在 acquire 函数中),它会将自己的 struct cpu* 存入此字段。 当它释放锁时(在 release 函数中),会将其清零。 这个字段对于 holding() 函数的实现和防止同一 CPU 重复获取锁至关重要。
struct cpu *cpu;
};