其他分享
首页 > 其他分享> > 管程

管程

作者:互联网

管程

为什么要引入管程

管程就像是一个类,将信号量与PV操作进行了封装

管程的组成:

  1. 局部于管程的共享数据结构说明

  2. 对该数据结构进行操作的一组过程

  3. 对局部于管程的共享数据设置初始值的语句

  4. 管程要有一个名字

管程的基本特征:

  1. 局部于管程的数据只能被局部于管程的过程所访问(变量私有)。

  2. 一个进程只有调用过程才能进入管程访问共享数据。

  3. 每一次仅仅允许一个进程在管程中执行某一个内部过程。(相当于是互斥了叭)(由编译器负责实现各进程互斥地进入管程中的过程)

管程是用来实现进程互斥和同步的

//用管程解决生产者与消费者问题
//定义管程
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