首页/操作系统/02-process/进程同步与信号量 🔗 在 Obsidian 中打开
操作系统 · 02-process

进程同步与信号量

重要度 ★★ 进程同步信号量PV操作互斥临界区
速查
临界资源同一时刻只允许一个进程访问;访问临界资源的代码段是临界区。信号量 S 只能通过原子操作 P(wait)V(signal) 访问:$S<0$ 时其绝对值 = 等待队列中阻塞进程数。

速查

项目
核心概念协调多进程对共享资源的访问,防止数据不一致
临界区四部分进入区→临界区→退出区→剩余区
P 操作$S=S-1$;若 $S<0$ 阻塞,加入等待队列
V 操作$S=S+1$;若 $S\le 0$ 唤醒一个等待进程

核心概念

进程同步是协调多个进程/线程对共享资源的访问,防止因并发执行导致数据不一致。临界资源是同一时刻只允许一个进程使用的资源,访问临界资源的代码段称为临界区。临界区四部分:进入区(检查并上锁)→ 临界区 → 退出区(解锁)→ 剩余区。

信号量机制:信号量 $S$ 是整型变量,只能通过两个原子操作访问:

  • P 操作(wait):$S = S - 1$;若 $S < 0$,进程阻塞,加入等待队列
  • V 操作(signal):$S = S + 1$;若 $S \le 0$,唤醒等待队列中的一个进程

信号量类型

  • 互斥信号量(mutex):初值 1,保护临界区
  • 资源信号量:初值 N(可用资源数),用于同步
  • 计数信号量:初值资源总数,管理多个同类资源

关键定义

概念定义
临界资源同一时刻只允许一个进程访问的资源
临界区访问临界资源的代码段
互斥某时刻只有一个进程能进入临界区
同步多进程按约定顺序执行(直接制约)
信号量整型变量 + 原子操作 P/V,用于同步和互斥
管程高级同步机制,封装共享数据与操作,保证互斥

常见考法

考点说明
PV 操作分析根据题意写信号量初值及 PV 序列
信号量物理意义$S>0$ 可用资源数;$S=0$ 无资源无等待;$S<0$ 等待数 $=\lvert S\rvert$
经典同步问题生产者-消费者、读者-写者、哲学家就餐
管程 vs 信号量管程互斥由编译器保证;信号量需手动
同步 vs 互斥同步是先后顺序,互斥是不能同时

易错点

注意
  • P 操作顺序不可颠倒:生产者-消费者先 P(empty) 再 P(mutex),否则死锁
  • V 操作顺序可交换(唤醒不需持有 mutex)
  • 互斥信号量初值 1,资源信号量初值 = 资源数
  • $S<0$ 时其绝对值 = 等待队列中阻塞进程数
  • 读者-写者中 count 的访问也需互斥保护
  • 管程条件变量的 signal 不累加(Hansen 语义)

核心结论

必背
  1. 信号量初值 N,则 $S \in [N-P, N]$
  2. 实现互斥的 P 操作必须放在同步 P 操作之后,否则可能死锁
  3. V 操作放临界区之后/剩余区前后均可,不影响互斥性
  4. 管程中一次只有一个进程活跃,条件变量的 wait/signal 不同于 P/V
  5. n 个进程互斥时 mutex 初值 1,取值范围 $[-(n-1), 1]$

记忆卡片

S<0 的物理含义?
绝对值 = 等待队列中阻塞进程数;$S>0$ 为可用资源数,$S=0$ 无资源无等待。
生产者 P 顺序为何不能颠倒?
必须先 P(empty) 再 P(mutex);否则先锁 mutex 再等 empty→死锁。
互斥与同步区别?
互斥是"不能同时",同步是"先后顺序"。
条件变量与信号量不同?
条件变量 signal 不累加(无等待则丢失);信号量 V 使 $S+1$。
互斥 P 放同步 P 前还是后?
之后(先同步后互斥),否则可能死锁。

交互动画 · P/V 操作与等待队列

信号量 S 1 等待队列
点击 P 观察 S 减少、S<0 时进程入队阻塞;点击 V 观察唤醒
$S<0$ 时其绝对值表示等待队列中阻塞进程的数量

相关知识点

deadlock process-and-thread monitor dining-philosophers producer-consumer readers-writers

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