美文网首页
PV操作经典问题

PV操作经典问题

作者: 天官大冢宰 | 来源:发表于2017-09-07 22:47 被阅读0次

    PV(wait/singal)在考操作系统的时候经常被问到,这篇小文就整理一下几个常见的PV问题。

    1. 生产者-消费者问题

    假定在生产者和消费者之间的公用缓冲池中,具有n个缓冲区,这时可利用互斥信号量mutex实现诸进程对缓冲池的互斥使用。利用信号量empty和full分别表示缓冲池中空缓冲区和满缓冲区的数量。

    又假定这些生产者和消费者相互等效,只要缓冲池未满,生产者便可以将消息送入缓冲池;只要缓冲池未空,消费者便可以从缓冲池取走一个信息。

    对生产者和消费者问题可以描述如下:

    mutex, empty, full : semaphore := 1, n, 0;
    buffer : array[0, ..., n-1] of item;
    in, out : integer := 0, 0;
    
    producer() {
        while(true) {
            ...
            produce an item nextp;
            ...
            wait(empty);
            wait(mutex);
            buffer[in]=nextp;
            in=(in+1)%n;
            single(mutex);
            signal(full);
        }
    }
    
    consumer() {
        while(true) {
            wait(full);
            wait(mutex);
            p=buffer[out];
            out=(out+1)%n;
            single(mutex);
            signal(empty);
            ...
            consume product p 
            ...
        }
    }
    

    2. 哲学家进餐问题

    该问题是描述有五个哲学家共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有五只筷子和五个碗,他们的生活方式是交替地进行思考和进餐。平时,一个哲学家进行思考,饥饿时便试图取用其左右最靠近他的筷子,只有他拿到两只筷子的时候才能进行进餐。进餐完毕,放下筷子继续思考。

    process(i) {//第i个哲学家
        while(true) {
            think;
            sswait(chopstick[(i+1)%5],chopstick[i]);
            eat;
            ssignal(chopstick[(i+1)%5],chopstick[i]);   
        }
    }
    

    这是使用AND机制的信号量处理。

    相关文章

      网友评论

          本文标题:PV操作经典问题

          本文链接:https://www.haomeiwen.com/subject/bswijxtx.html