我有一个全局std::queue,多个线程以同步方式逐个拾取元素.队列是结构.
每个线程调用.front()获取第一个/下一个元素并对其进行本地复制,然后.pop()从队列中进行复制(以便另一个线程通过调用获取下一个元素.front())
问题:复制元素会影响性能.
有没有办法从队列中分离元素?(因此它不再是队列的一部分.同时它也不会被删除.来电者将负责删除.)
您请求的队列操作不存在.备择方案:
front()然后pop()移动.请注意,如果您的结构非常大(例如,它有一个大型数组作为成员),那么移动仍然可能很慢,因为仍然必须复制对象本身的内容.但是,如果由于string成员或其他原因而复制结构的成本很高,那么移动会更便宜.list和splice()front元素用于使用者线程使用的另一个列表.处理后,将其从每个线程列表中删除.我并不是真的推荐这个,但我提到它是因为它是最接近于从容器中分离对象的东西.它与原始列表分离,但必须同时重新附加到其他列表.| 归档时间: |
|
| 查看次数: |
125 次 |
| 最近记录: |