# 2. 银行家算法的安全状态判定过程,请以具体资源分配矩阵演算一次? A 该进程的剩余需求 Need 不超过当前可用资源 Work ✓ 正确答案 B 该进程已分配的资源不超过其最大需求 C 该进程优先级最高 D 该进程已持有全部资源
# 5. 死锁检测的资源分配图,如何判断图中存在环,检测到死锁后的恢复策略(终止进程/资源剥夺)如何? A 图中存在请求边 B 图中存在分配边 C 图中存在循环(环) ✓ 正确答案 D 进程数量超过资源数量
# 6. 条件变量(Condition Variable)的 signal 与 broadcast 语义,为什么 broadcast 常被误用,条件变量与信号量在"丢失唤醒"(lost wakeup)问题上的本质差异如何? A 条件变量与信号量都可能丢失唤醒 B 条件变量内部有计数,signal 不会丢失 C 信号量内部有计数,V 操作不会因无等待者而丢失 ✓ 正确答案 D 信号量不存在计数状态
# 8. 活锁与饥饿和死锁的区别及各自的工程案例? A 饥饿是多个进程互相等待对方资源 B 活锁中进程在持续改变状态却始终无法推进 ✓ 正确答案 C 死锁中进程在持续运行但无进展 D 活锁与饥饿是同一概念
# 9. 哲学家就餐问题的五种解法(信号量/资源分级/Chandy-Misra)各解决什么问题? A 实现更简单 B 既避免死锁又避免饥饿,支持分布式环境 ✓ 正确答案 C 不需要哲学家协调 D 只解决互斥问题
# 10. 生产者-消费者、读者-写者问题的信号量与管程实现差异? A 需要显式管理所有 P/V 操作 B 自动保证互斥,用条件变量表达等待,结构更清晰 ✓ 正确答案 C 表达能力弱于信号量 D 不支持条件等待
# 12. 可重入锁(recursive mutex)的适用与危害,为什么可重入锁会掩盖设计问题,信号量为何不可重入? A 信号量不能用于互斥 B 信号量只在内核态使用 C 信号量不能被解锁 D 信号量没有记录持有者线程,只维护计数 ✓ 正确答案
# 13. 互斥锁的实现,TAS/CAS 与内核 futex 如何配合? A 加快用户态原子操作 B 增加锁的可重入性 C 替代 CAS 原子操作 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 线程栈帧数量