什么类型的多线程最好学习?

时间:2011-04-22 12:56:49

标签: c++ multithreading

我想学习C ++中的多线程,但我不确定哪种类型最有用。我看过教程的是:

  • Windows原生呼叫
  • OpenMP的
  • 升压

(我确信可能会有更多。)

每个人的主要特征是什么?它们最适合用于什么?

注意:我已经通过手动创建线程在C#中完成了一些多线程,线程的更复杂性只会让它变得更有趣。 :)

4 个答案:

答案 0 :(得分:5)

如果您有更多的C背景,我会从pthreads开始,如果您习惯使用更多惯用的C ++,那么我将从Boost Thread开始。要么合理便携也要广泛使用。

答案 1 :(得分:3)

如果你想便携式,请学习Posix线程。你知道,所有的线程库都提供了或多或少相同的一组功能,所以这取决于你,但是Posix会为你提供基础。

openMP并不像你的意思那样是“多线程”。

答案 2 :(得分:3)

TBB怎么样?它是可移植的,并且易于使用并行模板模式,并发容器,任务调度程序和可扩展内存分配器。 TBB将允许您直接管理线程,但在大多数情况下这不是必需的。

就个人而言,我会远离平台特定的线程,除非迫切需要做一些事情,特别是平台。

Boost线程是可移植且易于使用的,但既没有并行模式也没有并发容器。你需要手动管理线程,这很快就会变得难看。

PThreads在Windows及其C上不可用。你真的想在C ++中进行多线程,而不是C. RAII与互斥锁和范围锁很好地混合。

另一个选项是Visual C ++ 2010中的PPL。它与TBB类似,但您可能认为仅适用于Windows。

OpenMP易于使用,但不是很灵活。既然你已经学过C ++,你应该使用更严肃的东西,比如TBB或PPL。出于某些奇怪的原因,Visual C ++ 2010不支持OpenMP 3.太糟糕了。

答案 3 :(得分:1)

WinThreads(Windows)和pthreads(Linux)是POSIX线程,可能是您入门的最佳选择。了解进程和线程之间的区别非常重要,然后了解与它们相关的各种内存访问模型。接下来,尝试像OpenMP和MPI“线程”这样的并发方法。

有些基本概念会重复出现。好好学习。