【问题标题】:Bounded buffer problem - Why producer can only fill up n–1 buffer?有界缓冲区问题 - 为什么生产者只能填满 n–1 个缓冲区?
【发布时间】:2020-07-09 20:41:54
【问题描述】:

我读了一篇关于同步的讲座。

在本次讲座中,有 2 张幻灯片介绍了有界缓冲区问题(见下文)。

我的问题是关于黄色标记的句子,为什么生产者只能填充 n-1 个缓冲单元?谢谢!

【问题讨论】:

    标签: synchronization producer-consumer


    【解决方案1】:

    在第一张幻灯片上,共享数据包括两个变量的定义,inout。这两个变量的值都在 0 到 n - 1 的范围内,与为名为 buffer 的数组指定的索引值匹配。

    假设变量in初始化为0。生产者中while循环的条件是in+1 mod n = out .虽然这种情况可以防止覆盖未读数据,但它也设法只使用了 n-1 个数组元素。

    生产者的 while 循环的条件是一个试图过于聪明的例子。生产者需要知道数组何时已满。一种不太聪明的方法是多使用一个变量来存储缓冲区中的元素数量。我们称它为 count,它被初始化为 0。在向缓冲区添加元素时,生产者会增加 count。从缓冲区读取元素后,消费者会减少 count。当 count = n 时缓冲区已满。当 count = 0 时缓冲区为空。这种方法也有效,并且具有使用数组的所有 n 个元素的优点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-21
      • 2016-06-29
      • 2022-12-10
      • 1970-01-01
      • 2018-05-05
      • 2015-07-03
      • 1970-01-01
      • 2011-05-10
      相关资源
      最近更新 更多