インテル® スレッディング・ビルディング・ブロック (インテル® TBB) は、C++11 標準規格に基づく、プラットフォームのネイティブスレッドのラッパーを提供します。これらのラッパーを使用する利点は 2 つあります。
複数のプラットフォームにわたって可搬性があるスレッドコードを作成できる。
ISO C++11 スレッドに後から容易に移行できる。
「名前空間」セクションで説明したように、ライブラリーは、tbb 名前空間ではなく std 名前空間にラッパーを定義します。
C++11 と大幅に異なる点を次の表に示します。
C++11 |
インテル® TBB |
---|---|
template<class Rep, class Period> std::this_thread::sleep_for( const chrono::duration<Rep, Period>& rel_time) |
std::this_thread::sleep_for( tick_count::interval_t ) |
std::thread::id は、std::hash テンプレート・クラスと一緒にハッシュできます。 |
std::thread::id は、tbb::tbb_hash_compare および tbb::tbb_hash テンプレート・クラスと一緒にハッシュできます。 |
rvalue 参照引数 |
引数はプレーン値に変更、または関数を削除。 |
std::thread のコンストラクターの引数の数は任意。 |
std::thread のコンストラクターの引数の数は 0-3。 |
スレッドが joinable() の場合、std::thread のデストラクターは terminate() を呼び出します。 |
スレッドが joinable() の場合、std::thread のデストラクターは detach() を呼び出します。 |
ほかの変更点は、C++03 標準規格またはインテル® TBB との互換性に関連しています。例えば、引数の数が任意のコンストラクターには、C++11 の可変個引数テンプレート機能が必要です。
スレッドはほとんどのシステムにとって重い処理であり、システムで非常に多くのスレッドを実行すると、パフォーマンスが大幅に低下します。実用性を重視する場合は、代わりにタスクベースのソリューションを使用することを検討してください。