生产者-消费者实例
当生产者发现 counter == BUFFER_SIZE
生产者等待(阻塞)
当消费者发现 counter == 0
消费者等待(阻塞)
存在问题:
只用counter
做判断,在图中情况下会导致P2不会被唤醒。
应该需要另一量(信号量)考虑记录有多少进程阻塞等信息,并进行判断。
信号量
当 sem < 0
表示 sem
有多个进程在等待
当 sem > 0
表示有空闲
B,有2个资源可以使用
信号量的定义
queue
代表阻塞队列
V()
的模型:
V(semaphore s)
{
s.value++;
if(s.value <= 0)
{
wakeup(s.queue);
}
}