管程是一种用于多线程互斥访问共享资源的程序结构,采用面向对象的方法,简化线程间的同步控制,保证任意时刻最多只有一个线程执行管程代码,管程与临界区的区别是在管程中的线程可临时放弃管程的互斥访问,等待事件出现时恢复,而临界区只有线程退出临界区才能放弃互斥访问。

操作系统学习笔记(二十二):管程

      管程与临界区结构上差别在于多了共享数据,共享数据作为条件变量,如果条件变量的数量为0则跟临界区完全一样。进入管程的线程因资源被占用而进入等待状态,每个条件变量表示一种等待原因,对应着一个等待队列。管程最重要的两个操作:wait()和Signal(),wait将自身阻塞在等待队列中,唤醒一个等待者或释放管程的互斥访问,Signal操作将等待队列中的一个线程唤醒,如果等待队列为空,则等同空操作。

操作系统学习笔记(二十二):管程

       实现方式如下图,与信号量的实现很接近:

操作系统学习笔记(二十二):管程

      用管程解决生产者消费者问题:

操作系统学习笔记(二十二):管程

管程条件变量释放处理方式有两种如下图。可以看到Hoare的管程方式是更符合实际使用效果的,但是Hansen管程实现方式少了一次进程上下文切换,因此真实OS中一般使用Hansen管程方式。

操作系统学习笔记(二十二):管程

相关文章:

  • 2022-01-10
  • 2022-12-23
  • 2021-11-09
  • 2021-06-22
  • 2022-01-05
  • 2022-12-23
  • 2021-10-11
  • 2021-04-17
猜你喜欢
  • 2021-07-27
  • 2021-09-07
  • 2021-06-05
  • 2022-01-17
  • 2021-11-10
  • 2021-05-20
相关资源
相似解决方案