oneTBB线程池自动销毁机制解析及可借鉴设计探究
线程池自动销毁的设计疑问(基于oneTBB的改进)
以下是相关代码:
int main() { auto po = std::execution::par_unseq; // 若Parallel STL以TBB为后端,线程池应在首次调用for_each()时创建 std::for_each(po, begin, end, unaryFun); // 工作线程进入休眠状态 // ... 主线程执行其他任务 std::for_each(po, begin, end, unaryFun); // 线程唤醒并再次运行 // ... 主线程执行其他任务 } // 即将退出作用域时,线程池如何得知要自行销毁?
旧版TBB存在内存泄漏问题,使用sanitizer编译时需设置export ASAN_OPTIONS=alloc_dealloc_mismatch=0避免崩溃,该泄漏正是线程池未在作用域结束时销毁所致。
新版oneTBB已解决此问题,显然其解决方案不会是在每次for_each()调用内构造并销毁线程池(这会带来极大的性能开销),我想了解oneTBB如何让线程池在作用域结束时自动销毁,以便将该设计思路应用到其他结构中。
内容的提问来源于stack exchange,提问作者user2961927
相关产品推荐
相关产品推荐

