线程完成后需要很长时间才能清理

时间:2013-11-13 12:49:13

标签: c++ multithreading boost

我有一个数据结构'FileEntry',它内部有一个'Buckets'向量,这两个都存储为共享指针。当我的文件条目指针被破坏时,Buckets的析构函数也会按预期调用,完成所有清理工作。

我定时清理操作进行一些性能测量并发现一些奇怪的事情,我的存储桶指针清理只需要240和202毫秒,但我的完整文件清理时间为1768毫秒。

Completed cleanup for bucket : sessions 240
Completed cleanup for bucket : logs 202
Completed cleanup for fileentry : 1768

我使用了boost :: thread_group,在这些存储桶上执行作业,一旦两个存储桶完成,就会清除文件。主线程等待存储桶线程完成。

以下是两个析构函数的代码

    FileEntry::~FileEntry()
    {
     Timer timer("Completed cleanup for fileentry");
     this->_buckets.clear();
    }

    Bucket::~Bucket()
    { 
      Timer timer("Completed cleanup for bucket");
      this->_sessions.clear();
      this->_meta_lookup.clear();
      this->_unique_meta.clear();
      this->_writer.reset();
    }

我在这做什么错?我如何查看背景中发生的事情?

0 个答案:

没有答案