c++ - 我是否需要删除我创建的 boost 线程?

标签 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 时,我需要创建一个新线程。

我需要删除线程吗?

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

最佳答案

您需要回答的第一个问题是“线程的生命周期是什么?”

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

如果线程的生命周期不受更高级别函数的限制,只需创建线程并对其调用分离。此时“boost::thread 对象不再代表现在分离的线程”(参见引用资料),您可以安全地删除 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

关于c++ - 我是否需要删除我创建的 boost 线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24761101/

相关文章:

c++ - 减少内存分配 C++

c++ - 在 C++11 中,原始字符串文字可以有多行吗?

c++ - 透明度分层窗口白色

android - 如何运行使用内部类的线程?

c++ - 如何使用 boost::asio SSL 验证客户端证书?

c++ - boost 文件系统中 is_regular 和 is_regular_file 之间的区别

C++:两个指向相同结构的指针 vector ,每个 vector 的排序不同

multithreading - 在 Rust 的线程中访问 self 的方法

java - 如何停止Executors.newSingleThreadScheduledExecutor

c++ - 在工作完成后立即删除 boost::thread 对象的最佳方法是什么?