void lock(lock_t *lk);
void unlock(lock_t *lk);
做题家:拿到题就开始排列组合
科学家:考虑更多更根本的问题
xchg
实现互斥在厕所门口放一个桌子 (共享变量)
自旋锁 (Spin Lock)
int table = YES;
void lock() {
retry:
int got = xchg(&table, NOPE);
if (got == NOPE)
goto retry;
assert(got == YES);
}
void unlock() {
xchg(&table, YES); // 为什么不是 table = YES; ?
}
(在 model checker 中检查)
在 xchg 的
int locked = 0;
void lock() {
while (xchg(&locked, 1));
}
void unlock() {
xchg(&locked, 0);
}