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

Lud*_*cka 5 multithreading handle visual-c++

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

void test() 
{
    std::thread t1([] {}); 
    t1.join();
}
Run Code Online (Sandbox Code Playgroud)

每次运行这段代码时,都会有一个 Handle 泄漏。

这是来自 ProcessExplorer 的视图。这些泄漏的句柄是线程互斥锁“BaseNammedObjects\bx_thread_mutex”

在此处输入图片说明

这些互斥体在未来任何时候都不会被释放。这是一些知识问题吗?

我正在使用最新的 Visual Studio 2019 16.7.3,我正在 32 位应用程序上测试它(调试和发布也是如此)。

编辑:

泄漏的句柄与执行次数有关,因此此代码段:

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

创建 1000 个泄漏的句柄: 在此处输入图片说明

Lud*_*cka 2

抱歉,半虚惊一场。

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

当我禁用这个插件时,一切正常。所以这是 Deleaker 在里面做的事情。我会将这个问题报告给作者。

编辑:最新版本的 Deleaker 似乎修复了这个问题。

在此输入图像描述