c++ - 调用 join 后删除 std::thread?

标签 c++ multithreading c++11 std stdthread

我有一些代码可以动态分配一个新的 std::thread来自 C++11 <thread>标题,像这样:

std::thread *th = new thread( /* my args */);

一段时间后,我调用加入:

th->join();

既然我动态分配了线程,我还需要调用delete th;吗?释放内存?如果我这样做,我还需要打电话吗 join()第一?

最佳答案

为避免内存泄漏,您需要:加入 一个正在运行的线程,并确保它已被破坏/删除(让它超出堆栈分配的范围 std::threads 或为 std::thread* 显式调用 delete。

参见 thread::~thread在 cppreference 中:

A thread object does not have an associated thread (and is safe to destroy) after:

  • it was default-constructed
  • it was moved from
  • join() has been called
  • detach() has been called

因此,无法安全地销毁未加入的线程。

join()ed std::thread 仍会占用一些内存。因此,如果它在堆上,您需要确保它被正确释放。

关于c++ - 调用 join 后删除 std::thread?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30090299/

相关文章:

objective-c - cocoa 线程脾气暴躁

c++ - 将 C++11 move 语义应用于绑定(bind)函数

c++ - clang 能代替 Exuberant Ctags 吗?

C++ 错误 C2512 : no appropriate default constructor available

c++ - 在 C++ 中迭代 map<boost::tuple<int, string>, int>

c++ - 从libuv句柄继承

c++ - 传递对象并从线程调用中获取返回值

java - volatile Boolean 和 Boolean 的区别

multithreading - 如何将对堆栈变量的引用传递给线程?

multithreading - Vulkan中的多线程渲染(生成命令缓冲区)比单线程慢