インテル® TBB ライブラリーは、条件変数とスコープロックで C++11 インターフェイスの一部を変更して実装しています。主な違いは次のとおりです。
C++11 <chrono> インターフェイスの代わりに tbb::tick_count インターフェイスを使用します。
C++11 std::system_error の代わりに std::runtime_error をスローします。
constexpr や explicit 演算子のように C++11 言語サポートが必要な機能を省略または変更しています。
std::mutex の C++11 仕様の呼び出しは必ず tbb::mutex とともに実装します。
notify_all_at_thread_exit() はサポートされていません。
メンバーの詳細な説明は、C++11 標準規格を参照してください。
std::system_error のサポートが有効になると、std::runtime_error の代わりに std::system_error をスローするようになります。
「std 名前空間」セクションで説明されているように、ライブラリーは、tbb 名前空間ではなく std 名前空間に C++11 インターフェイスを定義します。
#include "tbb/compat/condition_variable"
namespace std { struct defer_lock_t { }; struct try_to_lock_t { }; struct adopt_lock_t { }; const defer_lock_t defer_lock = {}; const try_to_lock_t try_to_lock = {}; const adopt_lock_t adopt_lock = {}; template<typename M> class lock_guard { public: typedef M mutex_type; explicit lock_guard(mutex_type& m); lock_guard(mutex_type& m, adopt_lock_t); ~lock_guard(); }; template<typename M> class unique_lock: no_copy { public: typedef M mutex_type; unique_lock(); explicit unique_lock(mutex_type& m); unique_lock(mutex_type& m, defer_lock_t); unique_lock(mutex_type& m, try_to_lock_t)); unique_lock(mutex_type& m, adopt_lock_t); unique_lock(mutex_type& m, const tick_count::interval_t &i); ~unique_lock(); void lock(); bool try_lock(); bool try_lock_for( const tick_count::interval_t &i ); void unlock(); void swap(unique_lock& u); mutex_type* release(); bool owns_lock() const; operator bool() const; mutex_type* mutex() const; }; template<typename M> void swap(unique_lock<M>& x, unique_lock<M>& y); enum cv_status {no_timeout, timeout}; class condition_variable : no_copy { public: condition_variable(); ~condition_variable(); void notify_one(); void notify_all(); void wait(unique_lock<mutex>& lock); template <class Predicate> void wait(unique_lock<mutex>& lock, Predicate pred); cv_status wait_for(unique_lock<mutex>& lock, const tick_count::interval_t& i); template<typename Predicate> bool wait_for(unique_lock<mutex>& lock, const tick_count::interval_t &i, Predicate pred); typedef implementation-defined native_handle_type; native_handle_type native_handle(); }; } // std 名前空間