如何实现C++多线程数据处理后顺序输出到线程安全队列?

新手上路,请多包涵

求教一个c++多线程数据处理问题:原始数据带有递增序号放在一个线程安全队列q1中,使用多个线程从q1中拿数据,处理数据后(数据携带序号)再push到另外一个线程安全队列队列q2中,有什么方法可以保证q2中的数据也是序号递增的,同时效率较高?或者有其它什么方法可以实现类似效果?

尝试过在p2中记录当前序号,push方法里判断要加入的数据序号为index+1,否则不允许加入

void try_push(T new_value,bool& res)
    {
        if(new_value.index==index+1)
        {
            std::shared_ptr<T> data(std::make_shared<T>(std::move(new_value)));
            std::lock_guard<std::mutex> lk(mut);
            data_queue.push(data);
            index++;
            res=true;
            data_cond.notify_one();
        }
    }

这个方法可以保证顺序,但是性能达不到需求,求教有何种更高效的方法?

阅读 702
1 个回答

用线程安全的堆或者优先级队列怎么样?


不过这个需求听起来感觉应该是设计有缺陷。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏