1

在我正在开发的程序中,我们使用 tbb::Parallel_reduce 并且用户可以中途取消程序,我们通过抛出自定义异常来做到这一点。当抛出异常时,将调用单个线程的析构函数,而其余的则只剩下,并且由于每个线程都在制作一些数据的副本(需要处理),因此可能会出现非常大的内存泄漏。通常这不会成为问题,但是此代码正在另一个程序中运行,因此操作系统将无法释放内存。

我对此的主要问题是,有没有人知道一种方法可以在抛出异常时强制调用每个线程的析构函数,或者另一种能够清理数据的方法。非常感谢你。

4

1 回答 1

1

看起来它已在 TBB 4.2 中修复,这是 CHANGES 文件的摘录:

修复的错误:

  • 正如 Darcy Harrison 所建议的,当执行被取消或抛出异常时,修复了 parallel_reduce 主体对象的泄漏。
于 2014-03-24T16:38:59.360 回答