求教一个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();
}
}
这个方法可以保证顺序,但是性能达不到需求,求教有何种更高效的方法?
用线程安全的堆或者优先级队列怎么样?
不过这个需求听起来感觉应该是设计有缺陷。