我有一个有趣的生产者-消费者衍生产品可以实现,而且我不能全神贯注于它的算法。因此,每个生产者都将“产生”给定范围(最小,最大)之间的数字,从而对除以给定的“商”给出相同的提示。 消费者也是如此。
额外要求:有限的缓冲区。
我对此的看法:
我的问题:
我当时正在考虑为“缓冲区”使用数组列表,每个使用者都将执行无锁查找以使用“兼容”元素,如果有可用元素,则删除该元素,如果没有可用元素,则再试一次。我认为这样做会效率低下,因为在“尝试”上浪费了CPU周期。
PS :我正在为此使用Java,但是伪代码也确实很好。
谢谢!
答案 0 :(得分:1)
为确保生产者产生给定范围内所有具有相同余数的数字,您可以使用以下伪代码
int current = start;
while (current++ <= end) { //assuming your ranges are inclusive
if (current % quotient == 0) {
publish(current);
}
}
要支持分区,您基本上需要某种Map<YourKey, Queue>
。每个生产者和消费者都将与一个密钥相关联,并且生产者将发布到与其密钥相关联的队列中,并且消费者将从与其密钥相关联的队列中进行消费。您可以将范围用作队列的键。