c - 生产者消费者的解决方案

标签 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 循环的条件将为 true,因此该过程将进入无限循环并且不会出来,那么这个解决方案将如何工作。 请有人解释一下,如果您能给出一个实际的例子那就太好了!

最佳答案

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

关于c - 生产者消费者的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32800023/

相关文章:

c - 网络摄像头应用程序中的 opencv 错误

c - strtok 的奇怪结果

python - 如果 Python 进程在特定时间内未完成,则终止它?

java - 从 Java 启动时进程不会退出

java - 使用 java.awt.Toolkit 捕获全局按键

c - 时钟时间和墙上时间有什么区别?

c - 将子矩阵从主 MPI 传递到从属 MPI

c# - 从 C# 启动 Debug模式应用程序

c - 如何使用 asm 和 c 创建多级引导加载程序?

c - 编译后生成的二进制文件会发生什么