2

我正在使用 MSVC 2010 开始一个新的 MFC 项目,现在尝试决定将哪个库用于并发任务。我知道新的 C++0x 线程特性,但它没有在 VC10 中实现。VC12 还不是一个选项,但它会在未来出现。我确实有 Microsoft PPL,它对我来说看起来不错,但我们可能会从 Windows 迁移到 Linux 以迎接新的项目,所以对于重用代码,也许保留 STL 更便携?为此,我可以选择使用 boost 来使用 VC12 更改为 std。

我的问题是我应该更喜欢什么,PPL 或暂时提升然后 std?我想听听您对两者的体验,哪个更强大,更方便,优点和缺点。

4

2 回答 2

3

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

还值得注意的是,PPL 和 Intel 的 TBB(Threading Building Blocks)在很大程度上是为了共享相同的接口而设计的,并且在 Linux 上支持 TBB,因此在使用 PPL 时具有一定的跨平台可移植性。英特尔、微软和 NVIDIA 联合提议为基于 PPL/TBB 的 C++ 标准(C++14 及更高版本)的未来版本提供并行算法库。

于 2013-05-22T18:00:40.060 回答
0

Boost 线程简单、可移植、有据可查,是我这些天在 C++ 中常用的并发形式。如果您正在考虑进行 linux 构建,请不要依赖任何 VC 功能,否则您的举动将非常痛苦(以前我自己也这样做过……)。

话虽如此,新的 STL 内容在大多数方面与 boost 非常相似,因此您可以使用 boost 作为 std 的垫脚石,而不会带来太多痛苦。在我做出具体决定之前,我会阅读这篇关于boost 和 C++11 线程之间差异的文章并为您的用例进行解释。

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

于 2013-05-20T18:17:21.387 回答