管程
作者:互联网
管程
为什么要引入管程
管程就像是一个类,将信号量与PV操作进行了封装
管程的组成:
-
局部于管程的共享数据结构说明
-
对该数据结构进行操作的一组过程
-
对局部于管程的共享数据设置初始值的语句
-
管程要有一个名字
管程的基本特征:
-
局部于管程的数据只能被局部于管程的过程所访问(变量私有)。
-
一个进程只有调用过程才能进入管程访问共享数据。
-
每一次仅仅允许一个进程在管程中执行某一个内部过程。(相当于是互斥了叭)(由编译器负责实现各进程互斥地进入管程中的过程)
管程是用来实现进程互斥和同步的
//用管程解决生产者与消费者问题
//定义管程
monitor ProducerConsumer
condition full , empty ; //用来实现同步的信号量
int count = 0;
void insert(Intm item){
if(count == N){
wait(full); // 相当于是P操作,在这里停着等待唤醒
}
count ++;
insert_item(item);
if(count == 1) //如果是第一个插入的
signal(empty);//将等待的消费者唤醒
}
Item remove(){
if(count == 0){
wait(empty);
}
count--;
if(count == N-1)
signal(full);
return remove_item();
}
end monitor;
//生产者
producer(){
while(1){
item = 生产一个产品;
ProducerConsumer.insert(item);
}
}
//消费者
consumer(){
while(1){
item = ProducerConsumer.remove();
消费 item;
}
}
标签:count,full,互斥,管程,remove,item 来源: https://www.cnblogs.com/wuqiu/p/16558915.html