scoped_lock使用错误导致内存泄漏?

时间:2009-10-08 01:53:03

标签: c++ boost boost-thread scoped-lock

我有内存泄漏,我猜这是由于scoped_lock(Boost)的错误使用造成的。然而,我无法找到确切的问题,我确实认为编写代码的方式也不完全正确。

代码在这个类中: http://taf.codeplex.com/SourceControl/changeset/view/31767#511225

主要的重要方法是ThreadedLoop()。基本上,此方法在线程内启动,并定期检查要为Yahoo下载的市场数据。对于每个股票(或其他),将创建一个新线程(对于ExecuteNextRequest()方法),作为参数传递指向包含股票名称的字符串的指针。这是我唯一的内存分配,但它是在线程执行结束时发布的。

我也会对如何增强此代码感兴趣(当然我可以使用线程池,但这还不是重点)。非常感谢!

1 个答案:

答案 0 :(得分:0)

我建议您使用std::string而不是使用指向boost::shared_ptr<std::string>的“原始”指针,然后传递它。完成后,调用其reset()函数;它会减少使用次数,并在计数为0时自动释放字符串。

作为奖励,您可以将boost::weak_ptr个对象附加到这些字符串上(您可以将它们粘贴到vector中),并监控它们中有多少仍然“活着”。通过这种方式,您可以知道是否由于某种原因导致字符串不会减少为0。

要明确:

if (_tickersQueue.size() > 0)
{
    boost::shared_ptr<std::string> ticker(new std::string(PopNextTicker()));
    if (!ticker->empty())
        _threads.create_thread(boost::bind(&TAFYahooFinanceParadigm::ExecuteNextRequest, this, ticker));
    else
        ticker.reset();  // optional; ticker will drop out of scope anyway
}

是的,您必须适当调整ExecuteNextRequest的功能类型。 : - )