mcs spinlock

偶然看到 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 = 

阅读全文…