本文主要是介绍计算机操作系统读书笔记___管程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在面向过程语言提及的过程和面向对象提及的方法是一个意思。管程的概念
前言信号量的应用
目录
一、管程机制
1.1 定义
1.2 模型给出
二、生产者-消费者问题
一、管程机制
1.1 定义
代表共享资源的数据结构以及对该共享数据结构实施操作的一组过程所组成的资源管理程序共同构成了一个操作系统的资源管理模块。
管程相当于“围城 ”。
1.2 模型给出
特点:
- 管程内部的局部变量只能被管程内部的过程所访问,局部于管程内部的过程只能访问管程内部的变量和形参。
- 任何进程只能通过调用管程提供的过程入口进入管程。
- 任何时刻,最多只能有一个进程在管程中执行。
保证进程互斥进入管程是由编译器负责的,程序员本身无需考虑。
二、生产者-消费者问题
这不是真正的代码,只是一种算法的描述,不要拘泥于语法细节:
Monitor producerconsumer{item buffer[N]; //存放产品的缓冲池int in,out; //in代表第一个空位置,out代表第一个非空位置condition notfull, notempty; //notfull和notempty实际上都分别指向一个队列int count; //记录缓冲区现有产品数量public:void put(item x) //生产者{if(count >= N) cwait(notfull); //如果缓冲区已满,生产者必须等待else{buffer[in] = x; //产品放入缓冲区in = (in+1)%N; //空位置+1count++; //缓冲区现有产品数目+1csignal(notempty); //生产者唤醒因得不到产品而阻塞的第一个消费者}}void get(item &x) //消费者{if(count <= 0) cwait(notempty); //如果缓冲区已空,消费者必须等待else{x = buffer[out]; //取出一个产品out = (out+1)%N; //非空位置+1count--; //缓冲区现有产品数目-1csignal(notfull); //消费者唤醒因缓冲区满而阻塞的第一个生产者}}{ in = 0; out = 0; count = 0; }
}PC; //定义变量PC
在使用管程解决生产者-消费者问题,过程描述为:
这篇关于计算机操作系统读书笔记___管程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!