在我正在开发的程序中,我们正在使用tbb :: Parallel_reduce,用户可以在中途取消程序,我们通过抛出自定义异常来做到这一点。当抛出异常时,正在调用单个线程的析构函数,而剩下的就是其余的,并且由于每个线程正在复制一些数据(处理所需),因此可能存在极大的内存泄漏。通常这不会是一个问题,但是这个代码是在另一个程序中运行的,因此操作系统将无法释放内存。
我遇到的主要问题是,是否有人知道在抛出异常时强制调用每个线程的析构函数或以其他方式清理数据的方法。非常感谢你。
答案 0 :(得分:1)
看起来它已在TBB 4.2中修复,以下是CHANGES文件的摘录:
错误修复:
- 修复了执行时parallel_reduce正文对象的泄漏问题 如达西哈里森所建议的,取消或抛出例外。