如何解决具有订单保证的阻塞队列
我有8个线程分别处理图像。条带按栅格顺序排序。当每个线程都完成一个剥离时,该线程将其剥离ID号添加到阻塞队列中。我希望队列仅在数字从0到N的顺序中才允许弹出。因此,无论线程添加其ID的顺序如何,队列输出将为0、1、2、3,...。 ..N。 STL中是否存在具有此功能的现有构造?
我想一个简单的实现是一个从0开始的计数器的香草队列。当添加0时,它将弹出并将计数器移动到1,并一直弹出直到找不到匹配项。但这听起来效率低下。
编辑:如果我包装一个STL优先级队列以使其阻塞,则可以使用。
解决方法
这根本看起来不像队列!队列仅应支持push_back和pop_front。里面没有偷看。
我建议使用map<ID,image>
,并保留最后处理的图像ID。然后,您可以快速检查该地图的front()
是否在您的序列中的下一个,并将其删除。
所需的结构是最小堆(请参见std::priority_queue
)。这样,ID最低的元素。
每次新添加的元素位于队列的开头时,都要唤醒使用者线程。
一次性使用顺序中的所有元素。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。