我是操作系统的新手,我没有得到生产者消费者问题的解决方案, 生产者流程以
命名item nextProduced;
while(true)
{
while(((in+1)%BUFFER_SIZE)==out)
; /* do nothing */
buffer[in]=nextProduced;
in=(in+1)% BUFFER_SIZE;
}
,消费者流程由 -
给出item nextConsumed;
while(true)
{
while(in==out)
; /* do nothing */
nextConsumed=buffer[out];
out=(out+1)% BUFFER_SIZE;
}
我没有得到的是 - 书中写道,在有界缓冲区的情况下,如果缓冲区为空,则必须等待,如果缓冲区已满,则生产者必须等待, 但是从上面给出的过程来看, 如果缓冲区已满,那么第二个while循环的条件将为真,因此进程将进入无限循环而不会出现,那么该解决方案将如何工作。 有人请解释一下,如果你能提供一个实际的例子,那就太棒了!
答案 0 :(得分:0)
生产者可以调用yield()来给调度程序一个提示,它正在等待另一个线程。否则,代码必须依赖于抢占或多核架构。