有誰知道輕量級可移植C++線程庫,可以在Windows,Linux和Mac OS X上工作嗎?輕量級可移植C++線程
特別是在我的情況下,我做了一個模擬器,在每次通過後輸出模擬數據。我想只運行一個線程(模擬),它會偶爾啓動另一個線程(導出)。唯一的條件是:如果導出線程開始等待,直到完成,在開始一個新的。
感謝
有誰知道輕量級可移植C++線程庫,可以在Windows,Linux和Mac OS X上工作嗎?輕量級可移植C++線程
特別是在我的情況下,我做了一個模擬器,在每次通過後輸出模擬數據。我想只運行一個線程(模擬),它會偶爾啓動另一個線程(導出)。唯一的條件是:如果導出線程開始等待,直到完成,在開始一個新的。
感謝
什麼TinyThread++?
需要便攜式線程爲您的C + + 應用程序?您的 目標編譯器的C++ 0x不可用?太升 大?
然後你需要TinyThread ++!
TinyThread ++實現了相當的 兼容子集的C++ 0x線程 管理類。
我用Boost.Thread並會推薦給別人。
這是幾乎所有的便攜式和易於使用。 「輕量級」是唯一的問題,因爲我不確定這意味着什麼。因爲所有的線程功能都是針對底層線程庫(pthreads
,Win32 API,Cell BE等)的鬆散靜態封裝,所以Boost是輕量級的,因爲幾乎沒有使用它的開銷。 「互斥體」實際上是實現了「可鎖定」概念的任何東西(請參閱documentation),它可以是任何東西 - 甚至是您自己特殊的東西。從這個意義上講,它非常輕便和可擴展。
然而,升壓是巨大庫和拉只是它需要可以是非常痛苦的組成部分(這是對一般的升壓一個常見的抱怨)。關閉我的腦海,使用Boost.Thread意味着你必須有Boost.DateTime,Boost.System,Boost.ConceptCheck和Boost.Compiler(可能更多,以及其他依賴的東西等等)。值得稱讚的是,如果你擁有整個圖書館,因爲它們的自動鏈接魔法,建立你所需要的東西非常容易,但是需要全部考慮,特別是如果Windows在目標列表中的話。
作爲Boost的替代方案,假設您的編譯器支持它,我會推薦OpenMP。事實上,它需要編譯器支持某些更高級的功能,可能會使其不符合「輕量級」的要求,但它在使用上非常輕量級(您第一次使用#pragma omp parallel for
非常簡潔)。它不像Boost那樣功能豐富(我認爲只有Qt可以在這裏競爭),但是使用OpenMP給你一些非常酷的功能,沒有其他線程庫可以做。你將不得不使用一個有點現代的編譯器,但是GCC和MSVC都有很好的支持。有一點需要注意的是,它實際上是一個C庫,如果你在使用C++,我認爲它是一個缺點,但這對你的需求可能是一件好事。
如果你正在尋找更輕巧的東西(在這個詞的兩個意義上),那麼我會推薦OpenThreads。它遠不如Boost那樣可擴展,並且性能較差(雖然不是很明顯),但它設計得非常好,值得一提。它會觸及你指定的所有目標(Windows,OSX和Linux),所以如果它具有你想要的功能,就去做吧。
另外,Wikipedia。
Boot.Thread是你在找什麼。引用其在Boost的文檔中的描述
便攜式C++多線程。
輕便?爲什麼忽略這個要求? – 2010-11-15 17:06:19
@Matthieu M.引用@Travis Gockel「這取決於什麼」輕量級「這個詞的意思是」 – 2010-11-15 18:17:36
Boost.Thread會在這裏工作。
您可以使用join等待現有線程完成。
有在文檔中其他代碼示例,但啓動一個線程是這樣的:
struct callable
{
void operator()();
};
boost::thread copies_are_safe()
{
callable x;
return boost::thread(x);
} // x is destroyed, but the newly-created thread has a copy, so this is OK
boost::thread oops()
{
callable x;
return boost::thread(boost::ref(x));
} // x is destroyed, but the newly-created thread still has a reference
// this leads to undefined behaviour
我大多聽說過Boost.Thread可能很重,Poco.Thread應該是輕量級的,而Intel的TBB我不知道它是如何工作的。
我用C++ 0x做了一點實驗,但是我被告知它還不夠成熟,但對於複雜的實現。
我使用C++ 11的標準配置爲線程創建一個類的多線程,它適用於Linux,Windows和OS X,可以說,它是可以充分利用你:
https://github.com/jorgemedra/C-11-Threads/blob/master/README.md
沒有聽說過這個,謝謝 – 2010-11-15 17:35:28
非常好,謝謝。 – 2010-11-15 22:44:45