间隔分区的生产者-消费者

Producer-consumer with interval partitioning

我有一个有趣的生产者-消费者分拆要实施,但我无法全神贯注于它的算法。因此,每个 生产者 将“产生”给定范围(最小值、最大值)之间的数字,这同样提醒除以给定“商”。 消费者.

也是如此

额外要求:有限缓冲区。

我对此的看法:

我的问题:

我正在考虑为“缓冲区”使用数组列表,并且每个消费者都会执行无锁查找以查找要使用的“兼容”元素,如果元素可用则删除该元素,或者如果 [=56 则重试=]可用。我认为这会很低效,因为在“尝试”上浪费了 CPU 个周期。

PS:我用的是java,但是伪代码也很好。

提前致谢!

要确保生产者从给定范围内生成具有相同余数的所有数字,您可以使用以下伪代码

int current = start;
while (current++ <= end) { //assuming your ranges are inclusive
  if (current % quotient == 0) {
    publish(current);
  }
}

要支持分区,您基本上需要某种 Map<YourKey, Queue>。每个生产者和消费者都将与一个键关联,生产者将发布到与其键关联的队列,消费者将从与其键关联的队列中消费。您可以将您的范围用作队列的键。