生产者-消费者问题

生产者-消费者问题

系统中有一组生产者进程和一组消费者进程,生产者进程每次生一个产品放入缓冲区,消费者进程每次从缓冲区中取出一个产品并使用

生产者和消费者共享一个初始为空,大小为n的缓冲区

缓冲区没有满的时候,生产者才能把产品放入缓冲区,否则必须等待。

只有缓冲区没空的时候,消费者才能从中取出产品,否则必须等待。

缓冲区是一种临界资源,各进程必须互斥访问

semaphore mutex=1;//互斥信号量,实现对缓冲区的互斥访问
semaphore empty=n;//同步信号量,代表空闲缓冲区的数量
semaphore full=0;//同步信号量,代表产品的数量
producer(){
  while(1){
    生产一个产品;
    P(empty);//消耗一个空闲缓冲区
    P(mutex);
    放入;
    V(mutex);
    V(full);//消耗一个非空缓冲区,代表增加了一个产品
  }
}
consumer(){
  while(1){
    P(full);//消耗一个产品
    P(mutex);
    取出;
    V(mutex);
    V(empty);//增加一个空闲缓冲区
    使用产品;
  }
}

互斥的P操作,一定要在实现同步的P操作之后,顺序不能颠倒

但是V操作可以随意交换顺序,不会导致进程阻塞

posted @ 2025-09-29 11:42  是我,米老鼠  阅读(8)  评论(0)    收藏  举报