🏷️ 知识点:管程
2018 年第 28 题
操作系统
选择题
若 x 是管程内的条件变量,则当进程执行 x.wait() 时所做的工作是()。
A. 实现对变量 x 的互斥访问 B. 唤醒一个在 x 上阻塞的进程 C. 根据 x 的值判断该进程是否进入阻塞态 D. 阻塞该进程,并将之插入 x 的阻塞队列中
[tag_link]
正确答案:D
条件变量 是 管程 内部说明和使用的一种特殊变量,其作用类似于信号量机制中的信号量,都是用于实现进程同步的。需要注意的是,在同一时刻,管程中只能有一个进程在执行。如果进程 A 执行了 x.wait() 操作,那么该进程会阻塞,并挂到条件变量 x 对应的阻塞队列上。这样,管程的使用权被释放,就可以有另一个进程进入管程。如果进程 B 执行了 x.signal() 操作,那么会唤醒 x 对应的阻塞队列队头进程。在 Pascal 语言的管程中,规定只有一个进程要离开管程时才能调用 signal() 操作。
2016 年第 32 题
操作系统
选择题
下列关于管程的叙述中,错误的是( )。
A. 管程只能用于实现进程的互斥 B. 管程是由编程语言支持的进程同步机制 C. 任何时候只能有一个进程在管程中执行 D. 管程中定义的变量只能被管程内的过程访问
[tag_link]
正确答案:A
管程 是由一组数据以及定义在这组数据之上的对这组数据的操作组成的软件模块,这组操作能初始化并改变管程中的数据和同步进程。管程不仅能实现进程间的互斥,而且能实现进程间的同步,故 A 错误、B 正确。管程具有特性:①局部于管程的数据只能被局部于管程内的过程所访问;②一个进程只有通过调用管程内的过程才能进入管程访问共享数据;③每次仅允许一个进程在管程内执行某个内部过程,故 C 和 D 正确。