Skip to content

2026年 408 操作系统 第 27 题

操作系统2026年选择题2分

题目

假设进程 P 的读、写进程集合分别是 R(P) 和 W(P),进程 Q 的读、写进程集合分别为 R(Q) 和 W(Q),则进程 P 和 Q 并发执行中,不会发生错误的并发执行充要条件是( )。

Ⅰ. R(Q)∩W(P)=∅ Ⅱ. R(P)∩R(Q)=∅ Ⅲ. W(P)∩W(Q)=∅ Ⅳ. R(P)∩W(Q)=∅

错因

A

把"读读"也当成了冲突。可能是数据库事务隔离级里的"读读相容、读写冲突、写写冲突"还没建立起来,或被"任何同时访问都要互斥"的笼统概念误导,把 Ⅱ()也当成必要条件。但两个进程同时同一个变量不会改变它的值,结果一致——读读永远不冲突,Ⅱ 不需要成立。同时漏掉了 Ⅳ(写后读冲突),覆盖不全。

B

理解了"读读不冲突"以外的其他条件,但仍把 Ⅱ 当成必要——把"无干扰"过度解读为"完全无交集"。对并发安全来说真正要避免的只有"含写的两两访问",纯读不会引入数据竞争。Ⅱ 错;同时漏了 Ⅳ。

D

只考虑了"读写冲突"和"写写冲突"两类,但把"读"集合记错了:选 Ⅱ 而非 Ⅰ 和 Ⅳ。实际上 P 写到 Q 读、Q 写到 P 读这两类才是真正的"读写冲突"——而这分别对应 Ⅰ 和 Ⅳ;Ⅱ 是"两边都读",恰好是不冲突的那种。把读写冲突写成"两个读集合不相交"是典型的方向反置错误。

总解析

Bernstein 条件:进程 P 与 Q 可安全并发的充要条件是下面三组集合两两不相交

冲突类型不相交条件物理含义
写后读(P 写 → Q 读同一变量)防止 Q 读到 P 写一半的脏数据
读后写(Q 写 → P 读同一变量)防止 P 读到的值被 Q 偷换
写写冲突(双方都写同一变量)防止两方写入互相覆盖、最终值不确定

唯一不需要的是"读读不相交"——两个进程同时读同一变量,谁也不会改它,互不影响。

对照题目四个选项

  • Ⅰ. → 等价于 写后读冲突
  • Ⅱ. → "读读不相交",不必要
  • Ⅲ. 写写冲突
  • Ⅳ. 读后写冲突

需要同时满足的是 Ⅰ、Ⅲ、Ⅳ。

记忆口诀"写写、读写、写读三冲突,读读相安无事"——三个含 W 的方向都要不相交,只剩 RR 不用管。

最终答案是 C

最后更新:

⚠️ 这道题暂未配可视化,欢迎在 CodeBrick 反馈区告诉我们你想看哪道题