C ++堆栈泄漏与std :: thread类

时间:2019-03-04 22:43:10

标签: c++ multithreading c++11 memory-leaks

我似乎直接归因于使用std :: thread的堆栈泄漏。将其简化为最简单的示例,我使用了https://en.cppreference.com/w/cpp/thread/thread/detach中的示例代码,但对其进行了修改以循环并多次调用线程创建函数,并删除了多余的代码:

#include <chrono>
#include <thread>

void independentThread() 
{
    std::this_thread::sleep_for(std::chrono::milliseconds(200));
}

void threadCaller() 
{
    std::thread t(independentThread);
    t.detach();
    std::this_thread::sleep_for(std::chrono::milliseconds(100));
}

int main() 
{
    for(int i=0; i < 100; i++)
       threadCaller();
    std::this_thread::sleep_for(std::chrono::seconds(50));
}

然后我用g ++ 8.3编译了代码:

 g++ -std=c++14 -pthread -g -fstack-check -fstack-protector-all -finstrument-functions thread_test.cpp -o t_test

然后我用valgrind运行代码:

valgrind --tool=massif --stacks=yes --time-unit=ms ./t_test

valgrind的输出通过“ ms_print”运行,然后移至excel到图表: Chart of stack and heap bytes

我看到的所有内容都指向该线程导致的内存泄漏。我已经尝试过使用join,但是即使那样仍然存在泄漏,join无法用于我的应用程序。我正在gcc版本8.3.0的linux 4.14.77-70.59.amzn1.x86_64上运行此程序

我是否应该对线程执行其他操作,或者这种“泄漏”只是由valgrind错误报告的内存丢失?

谢谢

0 个答案:

没有答案