【发布时间】:2020-07-09 20:41:54
【问题描述】:
【问题讨论】:
标签: synchronization producer-consumer
【问题讨论】:
标签: synchronization producer-consumer
在第一张幻灯片上,共享数据包括两个变量的定义,in 和 out。这两个变量的值都在 0 到 n - 1 的范围内,与为名为 buffer 的数组指定的索引值匹配。
假设变量in初始化为0。生产者中while循环的条件是in+1 mod n = out .虽然这种情况可以防止覆盖未读数据,但它也设法只使用了 n-1 个数组元素。
生产者的 while 循环的条件是一个试图过于聪明的例子。生产者需要知道数组何时已满。一种不太聪明的方法是多使用一个变量来存储缓冲区中的元素数量。我们称它为 count,它被初始化为 0。在向缓冲区添加元素时,生产者会增加 count。从缓冲区读取元素后,消费者会减少 count。当 count = n 时缓冲区已满。当 count = 0 时缓冲区为空。这种方法也有效,并且具有使用数组的所有 n 个元素的优点。
【讨论】: