死锁与同步经典问题

共 20 题
#

1. 死锁产生的四个必要条件是什么?预防、避免、检测与解除四类策略分别破坏哪个条件?

A 互斥条件
B 占有且等待条件
C 不可剥夺条件
D 循环等待条件 ✓ 正确答案
#

2. 银行家算法的安全状态判定过程,请以具体资源分配矩阵演算一次?

A 该进程的剩余需求 Need 不超过当前可用资源 Work ✓ 正确答案
B 该进程已分配的资源不超过其最大需求
C 该进程优先级最高
D 该进程已持有全部资源
#

3. 哲学家就餐问题的多种解法(资源排序/信号量限流/管程)对比?

A 死锁检测
B 破坏循环等待条件 ✓ 正确答案
C 资源剥夺
D 死锁解除
#

4. 死锁的四个必要条件如何用"破坏其一"的思路设计解决方案?

A 让进程按编号顺序申请资源
B 要求进程一次性申请其所需的全部资源 ✓ 正确答案
C 允许系统剥夺进程资源
D 将独占资源改为共享
#

5. 死锁检测的资源分配图,如何判断图中存在环,检测到死锁后的恢复策略(终止进程/资源剥夺)如何?

A 图中存在请求边
B 图中存在分配边
C 图中存在循环(环) ✓ 正确答案
D 进程数量超过资源数量
#

6. 条件变量(Condition Variable)的 signal 与 broadcast 语义,为什么 broadcast 常被误用,条件变量与信号量在"丢失唤醒"(lost wakeup)问题上的本质差异如何?

A 条件变量与信号量都可能丢失唤醒
B 条件变量内部有计数,signal 不会丢失
C 信号量内部有计数,V 操作不会因无等待者而丢失 ✓ 正确答案
D 信号量不存在计数状态
#

7. 生产者-消费者与读者-写者问题的信号量方案与写者饥饿问题?

A 读者死锁
B 读者饥饿
C 缓冲区溢出
D 写者饥饿(读者源源不断使写者无法执行) ✓ 正确答案
#

8. 活锁与饥饿和死锁的区别及各自的工程案例?

A 饥饿是多个进程互相等待对方资源
B 活锁中进程在持续改变状态却始终无法推进 ✓ 正确答案
C 死锁中进程在持续运行但无进展
D 活锁与饥饿是同一概念
#

9. 哲学家就餐问题的五种解法(信号量/资源分级/Chandy-Misra)各解决什么问题?

A 实现更简单
B 既避免死锁又避免饥饿,支持分布式环境 ✓ 正确答案
C 不需要哲学家协调
D 只解决互斥问题
#

10. 生产者-消费者、读者-写者问题的信号量与管程实现差异?

A 需要显式管理所有 P/V 操作
B 自动保证互斥,用条件变量表达等待,结构更清晰 ✓ 正确答案
C 表达能力弱于信号量
D 不支持条件等待
#

11. 工程上的锁排序(lock ordering),为什么所有线程按相同顺序加锁能预防死锁,违反时如何用工具发现?

A 互斥条件
B 占有且等待
C 循环等待 ✓ 正确答案
D 不可剥夺
#

12. 可重入锁(recursive mutex)的适用与危害,为什么可重入锁会掩盖设计问题,信号量为何不可重入?

A 信号量不能用于互斥
B 信号量只在内核态使用
C 信号量不能被解锁
D 信号量没有记录持有者线程,只维护计数 ✓ 正确答案
#

13. 互斥锁的实现,TAS/CAS 与内核 futex 如何配合?

A 加快用户态原子操作
B 增加锁的可重入性
C 替代 CAS 原子操作
D 在竞争失败时让线程睡眠而非忙等,并支持唤醒 ✓ 正确答案
#

14. 自旋锁与互斥锁的选择,临界区长短如何权衡?

A 自旋锁(忙等) ✓ 正确答案
B 互斥锁(睡眠阻塞)
C 读写锁
D 信号量
#

15. 读写锁的公平性策略,读者优先/写者优先/公平锁对读写吞吐有何影响?

A 读者饥饿
B 死锁
C 读写吞吐均下降
D 写者饥饿(写者长期得不到执行) ✓ 正确答案
#

16. 无锁同步与 ABA 问题,CAS 循环为何可能 ABA,版本号/标记如何解决,工程上如何权衡无锁与加锁?

A 增加 CAS 重试次数
B 使用版本号/标记,CAS 同时比较值与版本 ✓ 正确答案
C 改用更快的原子操作
D 关闭编译优化
#

17. 屏障(Barrier)同步,多线程阶段化并行中的 barrier 语义,与条件变量的实现差异如何?

A 任一线程到达即放行
B barrier 与条件变量语义完全相同
C 所有参与线程都到达屏障后,才一起放行 ✓ 正确答案
D barrier 只能用于单线程
#

18. 死锁的工程检测,jstack/线程转储中如何识别死锁环,生产环境发现死锁后的处置流程如何?

A 线程 A 等待的锁被线程 B 持有,同时 B 等待的锁被 A 持有,形成环 ✓ 正确答案
B 线程栈里锁的数量
C 线程处于 RUNNABLE 状态
D 线程栈帧数量
#

19. 自旋锁、互斥锁、读写锁在用户态/内核态的实现开销对比?

A 阻塞读写锁
B 互斥锁
C 自旋锁 ✓ 正确答案
D 信号量
#

20. 读写锁与哲学家就餐,避免死锁的解法如何?

A 对所有资源采用一致的加锁顺序,打破循环等待 ✓ 正确答案
B 增加信号量数量
C 让读者优先
D 关闭锁