生产者消费者问题
能不能先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);
}