偶然看到 ticket spinlock 这个词,搜了一下相关的介绍,发现早在 1991 年就出现了(参考资料 1),并且还有根据论文作者命名的改进版 MCS spinlock。还找到了一篇由浅入深的介绍(参考资料 2)。本文基本是按照参考资料 2 的思路来写的。
自旋锁
顾名思义,自旋锁就是在一个变量上不停轮询,直到条件满足才继续往下执行:
typedef struct {
int val = 0;
} spinlock_t;
void lock(spinlock_t* lck) {
while (test_and_set(&lck->val) == 1) {}
}
void unlock(spinlock_t* lck) {
lck->val = … 阅读全文…