硬件同步方法利用特殊的硬件指令实现原子操作,这些指令在一个总线周期内完成「读-改-写」操作,不会被中断打断。
1. TestAndSet (TSL)
boolean TestAndSet(boolean *lock) {
boolean old = *lock;
*lock = true;
return old;
}
// 使用
while (TestAndSet(&lock)); // 忙等获取锁
// 临界区
lock = false; // 释放锁
2. Swap (XCHG)
void Swap(boolean *a, boolean *b) {
boolean temp = *a; *a = *b; *b = temp;
}
boolean key = true;
do { Swap(&lock, &key); } while (key); // 忙等
// 临界区
lock = false;
3. CompareAndSwap (CAS)
int CAS(int *val, int expected, int new_val) {
int old = *val;
if (old == expected) *val = new_val;
return old;
}
特点原子性由硬件总线锁 / 缓存一致性协议保证;简单高效、适用于任意多进程;但都是忙等,不满足让权等待。