首页/操作系统/进程管理/硬件同步方法 🔗 在 Obsidian 中打开
操作系统 · 进程管理 · 同步原语

硬件同步方法

重要度 ★★★★ 硬件同步TestAndSetSwapCAS
速查
硬件同步利用特殊硬件指令在一个总线周期内完成「读-改-写」原子操作,保证互斥。典型指令:TestAndSetSwapCAS。它们简单高效、适用于任意多进程,但都是忙等(不满足让权等待)。

核心概念

硬件同步方法利用特殊的硬件指令实现原子操作,这些指令在一个总线周期内完成「读-改-写」操作,不会被中断打断。

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;
}
特点原子性由硬件总线锁 / 缓存一致性协议保证;简单高效、适用于任意多进程;但都是忙等,不满足让权等待。

关键性质

指令原子性保证适用进程数是否忙等
TestAndSet硬件总线锁任意多
Swap硬件总线锁任意多
CAS硬件总线锁任意多
对比项软件方法 (Peterson)硬件方法 (TAS/CAS)
适用进程数仅 2 个任意多
实现复杂度较复杂简单
是否忙等
硬件依赖需要特殊指令

常见考法

考法解题套路
TestAndSet 执行过程读旧值 → 写新值 → 返回旧值,原子完成
硬件 vs 软件方法硬件方法适用于多进程,Peterson 仅两进程
忙等改进硬件方法 + 信号量 → 满足让权等待
CAS 原理比较并交换:值等于期望则更新,否则不操作

易错点

必记
  1. ⚠️ TestAndSet / Swap / CAS 都是原子操作——硬件级别不可分割。
  2. ⚠️ 原子性由总线锁 / 缓存一致性协议保证。
  3. ⚠️ 硬件方法仍然是忙等,不满足让权等待。
  4. ⚠️ CAS 存在ABA 问题:值从 A→B→A,CAS 误认为没变化。
  5. ⚠️ 硬件方法是信号量等高级同步机制的底层基础

记忆卡片

硬件同步核心思想?
用硬件指令(总线锁)保证「读-改-写」操作的原子性。
TestAndSet 的过程?
原子地读取旧值、设置新值、返回旧值。
硬件方法 vs Peterson?
硬件适用于任意多进程,Peterson 仅两进程。
什么是 CAS 的 ABA 问题?
值 A→B→A,CAS 误认为没变化,可能导致错误。

交互动画 · 原子「读-改-写」

进程请求锁while 忙等 lock = 0 (空闲)
点击上方指令,观察其如何在硬件层面原子地完成「读-改-写」以获取锁。
提示:原子操作由总线锁保证,期间不可中断。
示意图:进程请求锁,硬件原子指令一次性完成「读旧值 / 置位(或交换/CAS) / 返回」;忙等直到 lock 空闲。

相关知识点

peterson-algorithm critical-section-and-resource

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。