提升:创建对象并使用线程填充向量

时间:2017-11-05 00:48:17

标签: c++ multithreading boost

使用基于this boost asio的线程池,在这种情况下,该类名为ThreadPool,我希望并行化std::vector<boost::shared_ptr<T>>类型的向量的填充,其中{{1} }是一个T,包含struct类型的向量,其内容和大小是在结构初始化后动态确定的。

不幸的是,我是c ++和多线程的新手,所以我解决这个问题的尝试都失败了。这是一个过度简化的示例程序,它将任务的非线程和线程版本计时。线程版本的性能非常糟糕......

std::vector<int>

在做了一些挖掘之后,我认为糟糕的性能可能是由于线程争夺内存访问权限,但是我的新状态是否会阻止我利用这种洞察力。 您是否可以使用多个线程有效地填充指针向量,最好是在线程池中?

1 个答案:

答案 0 :(得分:3)

你没有提供足够的细节或Minimal, Complete, and Verifiable example,所以期待很多猜测。

createT是一个“便宜”的功能。调度任务及其执行开销要昂贵得多。这就是你的表现糟糕的原因。要从并行性中获得提升,您需要具有适当的工作粒度和工作量。粒度意味着每个任务(在您的情况下对createT的一次调用)应该足够大以支付多线程开销。最简单的方法是对createT个调用进行分组以获得更大的任务。