应用程序崩溃(bad_alloc)因为task_group泄漏了保留内存

时间:2012-03-20 14:23:53

标签: c++ windows multithreading memory-management concurrency

编辑:这最初被认为是一个碎片问题,这里是一个更精确的问题陈述。

我有完美的代码:

while(true)
{
    Job job = provider.NextJob();
    if (job.get() == NULL)
    {
        Result jobResult = job.Run();
        provider.ProcessJobResult(jobResult);       
    }
    else
    break;
}

我重新实现它:(最初有几个线程,但单个线程仍然表明问题)

JobProvider provider;
Concurrency::task_group taskGroup;

std::function<void ()> processingJob = [&provider, &taskGroup, &processingJob]
{
    Job job = provider.NextJob();
    if (job.get() == NULL)
    {
        Result jobResult = job.Run();
        provider.ProcessJobResult(jobResult);
        taskGroup.run(jobCode);
    }
};

taskGroup.run(jobCode);
taskGroup.wait();

此代码在一段时间后由于没有内存而崩溃。 分析我使用的内存空间:

  1. _CrtDumpMemoryLeaks()中的crtdbg.h - 如果作业数量足够小,可以让应用程序完成并退出,则表明没有泄漏。
  2. 此分析器:http://hashpling.org/asm/ 这是分析器显示的内容: Profiler output
  3. 红色表示承诺,黄色保留和绿色,完全消耗,意味着免费。 taskGroup创建的线程不会清除保留的内存。谁能说出原因?

0 个答案:

没有答案