IPC经典问题(生产者消费者)


生产者消费者问题

能不能先mutex再S1,S2?
不能,当生产者已经将缓冲区充满,消费者还没消费,则mutex上锁后阻塞在S1,然后消费者想mutex但是被阻塞,最后产生死锁。

需要两个S因为有n就有n-n,通过>=0的限制使用PV函数即可避免过度

mutex=1 同步信号量用于缓冲区互斥访问
empty=n // n为空闲缓冲区大小)
full=0  // 缓冲区初始化为空

// 生产者
while(true){
  P(empty);
  P(mutex);
  // 放入一件物品
  V(mutex);
  V(full);
}
// 消费者
while(true){
  P(full);
  P(mutex);
  // 拿出一件物品
  V(mutex);
  V(empty);
}

你可能感兴趣的:(IPC经典问题(生产者消费者))