C ++中是否有任何跨平台的线程库?

时间:2010-04-01 15:20:31

标签: c++ multithreading c++11 cross-platform

我正在寻找一些易于使用的用C ++编写的跨平台线程库。

您对boost::threadPthreads有什么看法? Pthreads是否仅在符合POSIX标准的系统上运行?

Qt库中的线程支持怎么样?

12 个答案:

答案 0 :(得分:33)

Boost.Thread是即将推出的C ++语言标准线程库的草案。知道这一点,我更喜欢使用它,因为它提供了一些强有力的保证(因为它成为标准)。

更新:现在我们有了标准的线程库,还有更多的精度。一些boost构造,如boost :: shared_mutex,尚未标准化(但可能会在以后)。然而,标准库更好地利用了移动语义。选择图书馆之前很高兴知道。此外,使用C ++ 11线程库需要一个提供它的编译器。今天所有的编译器都不是这样。

更新: 现在[Nov2012]大多数标准编译器都提供C ++ 11线程库。 VS2012,GCC4.8和Clang3.1支持线程和同步原语以及原子操作。 对于完整的实现,您也可以使用Anthony Williams的线程。它支持Windows / Mac和Linux上的C ++ 11兼容库。

C ++ 11功能与各种编译器的状态链接:

答案 1 :(得分:8)

C ++ 11附带了一个线程库。它建立在boost线程库之上。不幸的是,我似乎记得Boost.Threads和C ++ 11附带的东西之间存在非平凡的差异。不过,如果您打算切换到C ++标准线程库,我相信Boost.Threads是您现在最接近的。

我认为,总而言之,这些库将在POSIX系统上使用Pthreads,并且在其他地方可以使用任何本机线程支持。

免责声明:我没有与两者中的任何一个合作过。

答案 2 :(得分:4)

Pthreads仅在POSIX系统上运行。来自QThread的{​​{1}}是一种方法。它可在以下平台上使用: Linux,Mac OS X,Windows,嵌入式Linux,Windows CE,Symbian,Maemo。

答案 3 :(得分:4)

另请参阅OpenMP,这是most major compilers支持的一组(有些标准)pragma规范。 OpenMP的优点在于它很简单,您的代码可以在单线程和多线程版本中轻松编译。

只是一个简单的例子:

std::vector<double> a, b;
...
double sum = 0.0;
...
#pragma omp parallel for reduction(+:sum)
  for (i=0; i < n; i++)
    sum = sum + (a[i] * b[i]);

显然也可以more complex things

答案 4 :(得分:3)

我很惊讶没有人提到Intel TBB library(与我的另一个答案有关)。此外,基于线程的task-based implementation should be preferred

答案 5 :(得分:2)

Qt有很好的线程支持。如果您只需要创建一个线程并在其中运行一些代码,那么QThread就是您所需要的。还有许多其他高级类可以帮助您使用线程池,甚至可以抽象并发执行(QtConcurrent框架)。

答案 6 :(得分:2)

列出相关平台。如果您只使用say,Linux / Mac / Windows,那么boost :: thread可能会很好,直到C ++ 0x(harhar)提供std :: thread。

答案 7 :(得分:2)

我已经将pthread用于在多个平台上运行的代码。为了解决Windows缺乏pthread问题,我使用了以下开源库并取得了巨大成功:POSIX Threads for Windows

答案 8 :(得分:1)

wxWidgets有线程类,因为wxWidgets是独立于平台的,它可能对你来说是最好的。

答案 9 :(得分:1)

Boost.Threads建立在UNIX系统上的PThreads和Windows上的Win32 Threads之上。

boost库在语法上很简单,所有在C ++代码与C库正确连接的毛茸茸的业务都在幕后处理。但是,如果你对C ++不太满意,那么通过简单的C API,PThreads似乎更直接。

Qt Threads也是一个很好的库,但是因为我使用了其他几个boost库,所以无论如何我都会编译并链接到Boost。我可能并不总是与Qt联系。而且,我只是不想记住如何使用两个不同的库。

答案 10 :(得分:0)

SDL简单,跨平台,并具有线程支持。

答案 11 :(得分:0)

Pthread是Posix的一部分,但不是每个posix系统都有线程。 pthreads最便携。

您会支持哪些平台?