生产者消费者的解决方案

时间:2015-09-26 17:36:30

标签: c process operating-system infinite-loop

我是操作系统的新手,我没有得到生产者消费者问题的解决方案, 生产者流程以

命名
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循环的条件将为真,因此进程将进入无限循环而不会出现,那么该解决方案将如何工作。 有人请解释一下,如果你能提供一个实际的例子,那就太棒了!

1 个答案:

答案 0 :(得分:0)

生产者可以调用yield()来给调度程序一个提示,它正在等待另一个线程。否则,代码必须依赖于抢占或多核架构。