全知识整理目录
操作系统整理的目录,包括了整理的所有操作系统的知识。
目录
概述
管程是什么?
管程是一种特殊的软件模块,有以下部分组曾:
- 局部于管程的共享数据结构说明。
- 对数据结构进程操作的一组过程。
- 对局部的管程,的共享数据设置的初始语句。
- 管程有一个名字
ps:(管程当作类class,共享数据结构当做类里面的变量,一组过程可以看做是类里面的函数)。
为什么要引入管程?
信号量机制存在问题,编程困难,易出错。
为了使程序员不再关心复杂的PV操作。
管程的基本特征
- 局部于管程的数据,只能被局部于管程的过程所访问。
- 一个进程只有通过调用管程内的过程,才能进入管程访问共享数据。
- 每次仅允许一个进程在管程内执行某个内部过程。
管程实现生产者消费者问题
monitor ProducerConsumer
condition full,empty; //条件变量实现同步
int count=0; //缓冲区中的产品数
void insert(Item item){ //吧产品放入item缓冲区
if(count == N)
wait(full);
count++;
insert_item(item);
if(count == 1)
signal(empty);
}
Item remove(){
if(count == 0)
wait(empty);
count--;
if(count == N-1)
signal(full);
retrun remove_item();
}
end monitor
producer(){
while(1){
item = 生产一个产品;
ProducerConsumer.insert(item);
}
}
consumer(){
while(1){
ProducerConsumer.remove(item);
item = 消费一个产品;
}
}
可以定义一个特殊语法的管程,之后其他程序就可以使用这个管程,提供的特定的入口,从而方便的实现进程的同步互斥。
JAVA中类似管程的机制
synchronized,写过java代码的应该都了解到,使用这个来描述一个函数的话,就一次只允许一个线程调用。