我是否需要删除我创建的提升线程?

时间:2014-07-15 14:39:30

标签: c++ multithreading boost

我正在创建一个这样的线程:

 MyThread = new boost::thread(&MyThreadFunction, this);

和MyThreadFunction是:

void MyThreadFunction()
{
    for(int i=0;i<10000;i++)
    {
        Sleep(1000);
        boost::this_thread::interruption_point();
        cout<< "Test"<<i<<endl;
    }
}

正如您所看到的那样,线程在一段时间后(或者当它被中断时)是鱼。所以我需要在需要运行MyThreadFunction时创建一个新线程。

我是否需要删除该帖子?

如何检查线程是否仍在运行,以便在运行时无法将其删除?

1 个答案:

答案 0 :(得分:1)

您需要回答的第一个问题是&#34;线程的生命周期是什么?&#34;

线程的生命周期是否受某些更高级别功能的限制?如果是这样,您需要确定加入子线程的策略。线程加入后,您可以(并且必须)安全地删除动态分配的线程。如果你不删除该线程,你将拥有与boost :: thread对象本身相关的所有常见内存丢失(而不是因为没有加入底层Posix / Windows /等线程而导致资源丢失)

如果线程的生命周期不受更高级别函数的限制,只需创建线程并在其上调用detach。此时&#34; boost :: thread对象不再代表现在已分离的线程&#34; (参见参考资料),您可以安全地删除boost :: thread对象。没有必要跟踪或保持boost :: thread指针。在程序终止时将清理底层的OS线程资源。

当然,在大多数情况下,首先不需要动态分配boost :: thread对象。如果您需要控制生命周期并在以后加入它们,那么最好有一个维护该线程所有权的类并将其视为类成员。

请参阅:http://www.boost.org/doc/libs/1_55_0/doc/html/thread/thread_management.html#thread.thread_management.tutorial.detach