簡體   English   中英

boost::thread 與 std::thread 與 pthread

[英]boost::thread vs std::thread vs pthread

b/w boost::threadstd::thread (C++11) 和pthread對於高 CPU 吞吐量(讀取:大量浮點運算)基於 Linux 的應用程序的權衡是什么? 什么時候應該使用一種實現而不是其他實現?

這里的用例是在連續內存的緩沖區(或指向緩沖區的指針)上調用例程,做一些工作,然后返回——在多線程實現中。

  • std::thread
    • 親:是標准的; 保證在所有符合標准的平台上。
    • 缺點:需要 C++11,所以不能和古文一起使用。 編譯器。 只有基本的、最小的公分母特征。 但是,平台特定的功能仍然可以通過std::thread::native_handle
  • boost::thread
    • 優點:是跨平台的,在古老的編譯器上受支持。
    • 缺點:不標准; 需要外部依賴。 與標准線程類似的功能集。
  • pthread
    • 優點:具有更多功能,例如調度策略。
    • 缺點:僅在 POSIX 系統上,不包括 Windows。 非 RAII 接口。

什么時候應該使用一種實現而不是其他實現?

std::thread通常是一個很好的默認值。 如果您需要標准中沒有的pthread功能,您可以在std::thread::native_handle的幫助下使用它們(這會影響隨之而來的可移植性)。 沒有理由在 C++ 中直接使用pthread (據我所知)。

如果您需要古老的 pre-C++11 支持,可以使用boost::thread ,以保持對其他系統的可移植性。


請注意, std::thread本身不需要直接使用。 該標准具有有用的抽象,例如std::reducestd::packaged_taskstd::async 、算法的並行執行策略等。

唯一受標准支持的是std::thread ,如果您的構建工具允許 C++11 或更高版本,您應該使用它。 它是boost::thread的派生但標准化版本。

Pthreads 是特定於平台的線程實現, std::thread由 C++11 標准保證。 通常在像 POSIX 這樣的系統上std::thread內部使用 pthreads。

暫無
暫無

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

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