理解并发的工具
互斥 (mutual exclusion),“互相排斥”
lock_t
数据结构和 lock/unlock
API:typedef struct {
...
} lock_t;
void lock(lock_t *lk);
void unlock(lock_t *lk);
一把 “排他性” 的锁——对于锁对象 lk
lock
不能返回 (Safety)lock
时,至少有一个可以返回 (Liveness)Peterson 算法
因此,
允许使用使我们可以
void atomic_inc(long *ptr);
int atomic_xchg(int val, int *ptr);
看起来是一个普通的函数,但
int xchg(int volatile *ptr, int newval) {
int result;
asm volatile(
// 指令自带 memory barrier
"lock xchgl %0, %1"
: "+m"(*ptr), "=a"(result)
: "1"(newval)
// Compiler barrier
: "memory"
);
return result;
}