【发布时间】:2021-01-04 17:00:03
【问题描述】:
我有 8 个线程来处理条状图像。条带按光栅顺序排列。当每个线程完成一个条带时,该线程将其条带 ID 号添加到阻塞队列中。我希望队列仅在数字从 0 到 N 的顺序时才允许弹出。因此,无论线程添加其 ID 的顺序如何,队列输出将为 0、1、2、3、... ..N。 STL 中是否存在具有此功能的现有构造?
我想一个简单的实现将是一个普通队列,其计数器从 0 开始。当添加 0 时,它会弹出并将计数器移动到 1,并一直弹出直到找不到匹配项。但这听起来效率低下。
编辑:如果我包装一个 STL 优先级队列使其阻塞,这可以工作。
【问题讨论】:
-
为什么要排队?按顺序排列的元素集合称为数组。只需在每个条带完成时直接写入相应的元素即可。
-
条带被乱序处理 - 另一个线程将它们按顺序写入磁盘。因此,一个队列。
-
我在 Java 中遇到了类似的问题。 PriorityBlockingQueue 是不够的,因为我想阻塞直到顺序下一个项目入队。见stackoverflow.com/q/66541105/10026
标签: c++ multithreading stl queue priority-queue