VC10 PPL或准备STL线程

时间:2013-05-20 17:52:54

标签: c++ concurrency boost-thread ppl

我正在使用MSVC 2010启动一个新的MFC项目,现在正在尝试确定哪个lib用于并发任务。我知道新的C ++ 0x线程功能,但它没有在VC10中实现。 VC12还不是一个选择,但它将来会出现。我确实拥有对我来说很好的微软PPL,但是我们可能会从Windows迁移到Linux来进行新的项目,所以对于重用代码而言,保留STL更便携?为此我可以选择使用boost以便用VC12更改为std。

我的问题是我应该优先考虑,PPL或暂时提升然后std?我想听听你们两者的经历,哪一个更强大,更方便,有利有弊。

2 个答案:

答案 0 :(得分:3)

PPL和C ++ 11并发库并不是真正的直接替代品。 PPL提供了更高级别,基于任务的并发方法,并且比使用std :: thread或类似的线程库直接管理线程更容易使用和更高效。 PPL还包括并行算法(parallel_for_each,parallel_transform,parallel_reduce,parallel_sort等)和并发容器,它们不包含在C ++ 11并发库中。

值得注意的是,PPL和英特尔的TBB(线程构建模块)旨在在很大程度上共享相同的接口,并且Linux支持TBB,因此在使用PPL时存在一些跨平台可移植性。英特尔,微软和NVIDIA联合提出了一个并行算法库,用于未来版本的C ++标准(C ++ 14及更高版本),它们基于PPL / TBB。

答案 1 :(得分:0)

Boost线程很容易,可移植,文档记录很好,而且我最近通常采用C ++形式进行并发。如果您正在考虑使用Linux版本,请不要依赖任何VC功能,否则您的行动将非常痛苦(在此之前我自己做得很好......)。

据说新的STL内容与大多数方面的提升非常相似,所以你可以使用提升作为std的垫脚石而不会有太大的痛苦。我会在differences between boost and C++11 threads上阅读这篇文章并在我做出具体决定之前解释你的用例。

我对PPL的经验相当有限但是任务(线程)的创建可能与传统线程有点不同,并且具有不同的控制路径选项。如果你采用PPL路线,你也很可能会在Visual Studio / Windows中得到修复 - 所以请在评估库选择时保留它。我确实读过很好的PPL示例有点稀疏(可能为什么快速搜索没有给我更好的结果来比较PPL和其他并发库)。