代码之家  ›  专栏  ›  技术社区  ›  NumberFour

C++中有跨平台线程库吗?

  •  24
  • NumberFour  · 技术社区  · 14 年前

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

    你对什么意见 boost::thread Pthreads ? pthreads是否仅在符合POSIX的系统上运行?

    中的线程支持 Qt 图书馆?

    12 回复  |  直到 12 年前
        1
  •  33
  •   Sarang    12 年前

    Posith.Trand是C++语言标准线程库的草稿。我知道,我更喜欢使用它,因为它提供了一些强有力的保证(因为它变成了标准)。

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

    更新: 现在[2010]大多数标准编译器提供C++ 11线程库。VS2012、GCC4.8和Clang3.1支持线程、同步原语和原子操作。 为了完整的实现,您还可以使用Anthony Williams的Just Thread。它是在Windows/MAC和Linux支持下的C++ 11兼容库。

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

        2
  •  8
  •   sbi    14 年前

    有一个用C++ 11编写的线程库。它建立在Boost线程库之上。不幸的是,我似乎记得在Booost线程和C++ 11之间有什么细微的差别。不过,如果您打算切换到C++标准线程库,我相信Booto.T线是目前为止最接近的。

    我认为,在这种情况下,这些库将在POSIX系统上使用pthreads,以及在其他地方提供的任何本机线程支持。

    免责声明:我没有和这两个人合作过。

        3
  •  4
  •   zoli2k    14 年前

    Pthreads 仅在POSIX系统上运行。 QThread Qt 是一种方式。它在平台上可用: Linux、Mac OS X、Windows、嵌入式Linux、Windows CE、Symbian、Maemo。

        4
  •  4
  •   Community CDub    7 年前

    也可以看看 OpenMP ,这是一套(有些标准) pragma 支持的S规范 most major compilers . 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 .

        5
  •  3
  •   Community CDub    7 年前

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

        6
  •  2
  •   LukáÅ¡ Lalinský    14 年前

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

        7
  •  2
  •   Puppy    14 年前

    列出相关平台。如果您只使用了“Linux”/Mac/Windows,那么,Boo::线程可能会对您很好,直到C++ 0x(HARHAR)提供STD::线程。

        8
  •  2
  •   Starkey    14 年前

    我使用pthreads来编写在多个平台上工作的代码。为了解决Windows缺少pthreads的问题,我成功地使用了以下开源库: POSIX Threads for Windows

        9
  •  1
  •   the100rabh    14 年前

    wxWidgets 有线程类,由于wxwidgets是独立于平台的,所以它可能是美国最好的选择。

        10
  •  1
  •   Dr. Watson    14 年前

    线程构建在Unix系统上的pthreads和Windows上的win32线程之上。

    Boost库在语法上是简单的,所有与C++代码正确地连接C++代码的毛茸茸的业务都在后台进行维护。但是,如果你对C++不太满意,那么pClinux可能会更简单地使用简单的C API。

    qt线程也是一个很好的库,但是因为我使用了其他几个boost库,所以不管怎样,我都会编译和链接boost。我可能并不总是和qt联系在一起。我只是不想记住如何使用两个不同的库。

        11
  •  0
  •   SurvivalMachine    14 年前

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

        12
  •  0
  •   osgx    14 年前

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

    您将支持哪些平台?