1

私が取り組んでいるプログラムでは、tbb::Parallel_reduce を使用しており、ユーザーはプログラムを途中でキャンセルできます。カスタム例外をスローすることでこれを実行しています。例外がスローされると、単一のスレッドのデストラクタが呼び出され、残りのスレッドは残されます。各スレッドはデータの一部 (処理に必要) のコピーを作成するため、非常に大きなメモリ リークが発生する可能性があります。通常、これは問題にはなりませんが、このコードは別のプログラム内で実行されているため、オペレーティング システムはメモリを解放できません。

これに関する主な質問は、例外がスローされたときに各スレッドのデストラクタを強制的に呼び出す方法、またはデータをクリーンアップできる別の方法を知っている人はいますか? どうもありがとうございました。

4

1 に答える 1

1

TBB 4.2 で修正されたようです。CHANGES ファイルからの抜粋を以下に示します。

修正されたバグ:

  • Darcy Harrison によって提案されたように、実行がキャンセルされたとき、または例外がスローされたときの parallel_reduce 本体オブジェクトのリークを修正しました。
于 2014-03-24T16:38:59.360 に答える