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

Handle leak in std::thread c++

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

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

每次我运行这段代码,一个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();
}

创建 1000 个泄漏句柄:

抱歉 semi-false 警报。

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

当我禁用这个插件时,一切正常。所以这是 Deleaker 在内部所做的事情。我会把这个问题反馈给作者。

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