Appearance
题目
下列关于管程的叙述中,错误的是( )
错因
B
B 是对的——管程是编程语言层面的同步机制(Concurrent Pascal、Mesa、Java 的 synchronized 都基于这个思想)。它不像信号量那样是 OS 提供的原语,而是编译器 + 运行时协同实现,编程语言要支持。看错"错误的"反向措辞会误选。
C
C 也是对的——管程的互斥性就是这条:任意时刻最多一个进程进入管程执行,编译器自动给管程入口加锁。这是管程的核心特征之一。把它当错的就是没记住管程"独享访问"的设计。
D
D 也是对的——管程封装数据:里面定义的共享变量只能被管程内部的过程操作,外部进程只能通过调用管程方法访问,不能直接读写变量。这是管程的"封装"特性,类似面向对象的私有字段。
总解析
题问"错误"。先把管程的核心特征列清:
| 特征 | 描述 |
|---|---|
| 互斥 | 任意时刻最多一个进程在管程内执行(编译器加锁) |
| 同步 | 通过条件变量 wait / signal 实现进程间同步 |
| 封装 | 内部数据只能被内部过程访问 |
| 语言支持 | 由编程语言 + 编译器实现,不是 OS 原语 |
逐条核对:
| 选项 | 描述 | 判定 |
|---|---|---|
| A | 管程只能用于实现互斥 | ✗ 错 —— 管程除互斥外也能实现同步(条件变量 wait/signal),是同时解决两件事的同步原语。说"只能互斥"漏了"同步"这半边核心功能 |
| B | 编程语言支持的同步机制 | ✓ |
| C | 任意时刻只一个进程执行 | ✓ 互斥特征 |
| D | 内部变量只能被内部过程访问 | ✓ 封装特征 |
关键区分:互斥是"一次只一个";同步是"按条件等待 / 通知"——两件事在管程里都做,靠条件变量实现同步。说"只能互斥"等于把管程的同步功能砍了一半。
最终答案是 A。