处理std :: thread C ++中的泄漏

问题描述

今天,我注意到使用std :: thread时有一个奇怪的想法。这是最小的测试用例:

void test() 
{
    std::thread t1([] {}); 
    t1.join();
}

每次我运行此代码时,都会有一个句柄泄漏。

这是ProcessExplorer的视图。这些泄漏的句柄是线程互斥体“ BaseNammedobjects \ bx_thread_mutex”

enter image description here

这些互斥锁不会在将来的任何时候发布。这是一些已知问题吗?

我正在使用最新的Visual Studio 2019 16.7.3,并且正在32位应用程序上对其进行测试(也调试和发布)。

已编辑:

泄漏的句柄取决于执行次数,因此此代码段:

for (int n = 0; n < 1000; n++)
{
    std::thread t1([] {});
    t1.join();
}

创建1000个泄漏的句柄:

enter image description here

解决方法

对不起,半误报。

问题似乎是由用于内存泄漏检测的第三方插件Deleaker(我现在正在测试)引起的(有趣,对吗?;-))。

当我禁用此插件时,一切正常。因此,这是Deleaker在内部执行的操作。我将向作者报告此问题。

编辑::似乎最新版本的Deleaker可以解决此问题。

enter image description here