生产者消费者问题(Producer-consumer problem)

PV操作
P操作:
(1)S=S-1;
(2)如果S>=0,则该进程继续执行;否则该进程置为等待状态,排入等待队列。
V操作:
(1)S=S+1;
(2)如果S>0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。

#define N 100
typedef int semaphore;
semaphore mutex=1;
semaphore empty=N;
semaphore full=0;

void producer()
{
    int item;
    while(true)
    {
        item=produce_item();
        down(&empty);
        down(&mutex);
        insert_item(item);
        up(&mutex);
        up(&full);
    }
}

void consumer()
{
    int item;
    while(true)
    {
        down(&full);
        down(&mutex);
        item=remove_item();
        up(&mutex);
        up(&empty);
        consume_item(item);
    }
}

过程:
(1)生产者执行down(&empty),empty=N-1>=0,生产者把一个产品放到缓冲区;
(2)生产者执行up(&full),full=1>0,激活消费者执行down(&full),full=0>=0,消费者从缓冲区取出一个产品;
(3)消费者执行up(&empty),激活生产者执行down(&empty),生产者继续把一个产品放到缓冲区。

你可能感兴趣的:(生产者消费者问题(Producer-consumer problem))