Skip to content

2016年 408 操作系统 第 32 题

操作系统2016年选择题2分

题目

下列关于管程的叙述中,错误的是( )

错因

B

B 是对的——管程是编程语言层面的同步机制(Concurrent Pascal、Mesa、Java 的 synchronized 都基于这个思想)。它不像信号量那样是 OS 提供的原语,而是编译器 + 运行时协同实现,编程语言要支持。看错"错误的"反向措辞会误选。

C

C 也是对的——管程的互斥性就是这条:任意时刻最多一个进程进入管程执行,编译器自动给管程入口加锁。这是管程的核心特征之一。把它当错的就是没记住管程"独享访问"的设计。

D

D 也是对的——管程封装数据:里面定义的共享变量只能被管程内部的过程操作,外部进程只能通过调用管程方法访问,不能直接读写变量。这是管程的"封装"特性,类似面向对象的私有字段。

总解析

题问"错误"。先把管程的核心特征列清:

特征描述
互斥任意时刻最多一个进程在管程内执行(编译器加锁)
同步通过条件变量 wait / signal 实现进程间同步
封装内部数据只能被内部过程访问
语言支持由编程语言 + 编译器实现,不是 OS 原语

逐条核对:

选项描述判定
A管程只能用于实现互斥✗ 错 —— 管程除互斥外也能实现同步(条件变量 wait/signal),是同时解决两件事的同步原语。说"只能互斥"漏了"同步"这半边核心功能
B编程语言支持的同步机制
C任意时刻只一个进程执行✓ 互斥特征
D内部变量只能被内部过程访问✓ 封装特征

关键区分:互斥是"一次只一个";同步是"按条件等待 / 通知"——两件事在管程里都做,靠条件变量实现同步。说"只能互斥"等于把管程的同步功能砍了一半。

最终答案是 A

最后更新:

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