题58
题目
[!error]+
Q:【2018 统考真题】若 x 是管程内的条件变量, 则当进程执行 x.wait() 时所做的工作是 ( )
A. 实现对变量 x 的互斥访问
B. 唤醒一个在 x 上阻塞的进程
C. 根据 x 的值判断该进程是否进入阻塞态
D. 阻塞该进程,并将之插入 x 的阻塞队列中
分析
[!NOTE]+
A:管程里的wait操作是在等待条件变量的条件成立, 若条件不成立, 则进程会被阻塞, 并插入到条件变量对应的阻塞队列中, 以便被唤醒
- “条件变量” 是管程内部说明和使用的一种特殊变量,作用类似于信号量机制中的 “信号量”
- 都用于实现进程同步
- 需要注意的是, 在同一时刻, 管程中只能有一个进程在执行
- 若进程
执行了 x.wait()操作 - 则该进程会阻塞
- 并挂到条件变量
对应的阻塞队列上
- 这样,管程的使用权被释放
- 就可以有另一个进程进入管程
- 若进程
执行了 x.signal()操作 - 则会唤醒
对应的阻塞队列的队首进程
- 则会唤醒
- 只有一个进程要离开管程时才能调用 signal()操作
解
[!done]+
D