Boost.ThreadとC ++ 11標準スレッドライブラリにはいくつかの違いがあります。
- Boostはスレッドのキャンセルをサポートしていますが、C ++ 11スレッドはサポートしていません
- C ++ 11はをサポートしています
std::async
が、Boostはサポートしていません
- Boostには、
boost::shared_mutex
複数のリーダー/単一のライターのロックがあります。類似のものstd::shared_timed_mutex
はC ++ 14(N3891)std::shared_mutex
以降でのみ利用可能ですが、C ++ 17(N4508)以降でのみ利用可能です。
- C ++ 11タイムアウトは、Boostタイムアウトとは異なります(ただし、Boost.Chronoが受け入れられたため、すぐに変更されるはずです)。
- 名前の一部が異なります(例:
boost::unique_future
vs std::future
)
- の引数渡しのセマンティクス
std::thread
は異なりますboost::thread
--- Boostはboost::bind
、コピー可能な引数を必要とするを使用します。std::thread
などの移動のみのタイプstd::unique_ptr
を引数として渡すことができます。の使用によりboost::bind
、_1
ネストされたバインド式などのプレースホルダーのセマンティクスも異なる場合があります。
- 明示的に呼び出さない場合、
join()
またはデストラクタと割り当て演算子は、破棄/割り当て先のスレッドオブジェクトを呼び出します。C ++ 11 オブジェクトを使用すると、アプリケーションが呼び出され、アプリケーションが異常終了します。detach()
boost::thread
detach()
std::thread
std::terminate()
移動のみのパラメーターに関する要点を明確にするために、以下は有効なC ++ 11でありint
、一時的なものstd::unique_ptr
からf1
新しいスレッドが開始されるときのパラメーターにの所有権を転送します。ただし、内部boost::thread
で使用するboost::bind
ため、使用してstd::unique_ptr
も機能せず、コピーできません。GCCで提供されているC ++ 11スレッドライブラリにもバグがありstd::bind
、実装で使用されているため、この動作を妨げています。
void f1(std::unique_ptr<int>);
std::thread t1(f1,std::unique_ptr<int>(new int(42)));
ブーストを使用している場合、コンパイラがサポートしていれば、おそらく比較的簡単にC ++ 11スレッドに切り替えることができます(たとえば、Linux上のGCCの最近のバージョンには、-std=c++0x
モードで使用できるC ++ 11スレッドライブラリのほぼ完全な実装があります)。
コンパイラがC ++ 11スレッドをサポートしていない場合、Just :: Threadなどのサードパーティの実装を取得できる可能性がありますが、これは依然として依存関係です。