题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