簡體   English   中英

C ++中是否有任何跨平台的線程庫?

[英]Is there any cross-platform threading library in C++?

我正在尋找一些易於使用的用C ++編寫的跨平台線程庫。

你對boost::threadPthreads什么看法? Pthreads是否僅在符合POSIX標准的系統上運行?

Qt庫中的線程支持怎么樣?

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功能的鏈接:

C ++ 11附帶了一個線程庫。 它建立在boost線程庫之上。 不幸的是,我似乎記得Boost.Threads和C ++ 11附帶的東西之間存在非平凡的差異。 不過,如果您打算切換到C ++標准線程庫,我相信Boost.Threads是您現在最接近的。

我想,在這個引擎蓋下,這些庫將在POSIX系統上使用Pthreads,並且在其他地方可以使用任何本機線程支持。

免責聲明:我沒有與兩者中的任何一個合作過。

Pthreads僅在POSIX系統上運行。 來自Qt QThread是一種方法。 它可以在平台上使用: Linux,Mac OS X,Windows,嵌入式Linux,Windows CE,Symbian,Maemo。

另請參閱OpenMP ,它是大多數主要編譯器支持的一組(有些標准) 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]);

顯然也可以做 復雜的 事情

我很驚訝沒有人提到英特爾TBB庫 (鏈接到我的另一個答案)。 此外,基於任務的實現應優先於基於線程的實現。

Qt有很好的線程支持。 如果您只需要創建一個線程並在其中運行一些代碼,那么QThread就是您所需要的。 還有許多其他高級類可以幫助您使用線程池,甚至可以抽象並發執行(QtConcurrent框架)。

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

我已經將pthread用於在多個平台上運行的代碼。 為了解決Windows缺乏pthread問題,我使用了以下開源庫並取得了巨大成功: 適用於Windows的POSIX線程

wxWidgets有線程類,因為wxWidgets是獨立於平台的,它可能對你來說是最好的。

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

boost庫在語法上很簡單,所有在C ++代碼與C庫正確連接的毛茸茸的業務都在幕后處理。 但是,如果你對C ++不太滿意,那么通過簡單的C API,PThreads似乎更直接。

Qt Threads也是一個很好的庫,但是因為我使用了其他幾個boost庫,所以無論如何我都會編譯並鏈接到Boost。 我可能並不總是與Qt聯系。 而且,我只是不想記住如何使用兩個不同的庫。

SDL簡單,跨平台並具有線程支持。

Pthread是Posix的一部分,但不是每個posix系統都有線程。 pthreads是最便攜的。

你會支持哪些平台?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM