例外

インテル® スレッディング・ビルディング・ブロック (インテル® TBB) は、タスクツリーの論理パスに沿って例外を伝えます。これらのパスはスレッドのスタックをまたいでいるため、スタック間で例外を移動できなければなりません。

タスクで例外がスローされると、インテル® TBB ランタイム内で次のようにキャッチされ、処理されます。

  1. タスクのキャンセルグループがすでにキャンセルされている場合は、例外は無視されます。
  2. その他の場合は、例外またはそれに類似するものがキャプチャーされ、グループがキャンセルされます。
  3. キャプチャーされた例外は、グループのすべてのタスクが完了するか、キャンセルされた後に、キャンセルグループのルートから再スローされます。

次の条件が両方とも真の場合は、オリジナルの例外がキャプチャーされます。

その他の場合は、次のように、オリジナルの例外に類似する x がキャプチャーされます。

  1. xtbb_exception の場合は、x.move() でキャプチャーされます。
  2. xstd::exception の場合は、tbb::captured_exception(typeid(x).name(),x.what()) としてキャプチャーされます。
  3. その他の場合は、xname() および what() で実装固有の値とともに tbb::captured 例外としてキャプチャーされます。