给自己一个std::shared_ptr<std::thread>。已定义或未定义的行为
Giving a std::shared_ptr<std::thread> to itself. Defined or Undefined behavior
我有以下te代码:
void launchThread() {
std::shared_ptr<std::thread> t;
t = std::make_shared<std::thread>([t] {std::cout<< "HelloWorld"<<std::endl;});
t->detach();
}
int main(){
launchThread();
somthing that takes a while....
}
如果我正确,则斜线应使用共享指针保持生命,直到线程本身用尽范围为止。但是我想知道当共享指针被破坏时会发生什么,是否正确清洁线程?还是这是不良习惯?
std::thread::detach
释放所有权 - 当shared_ptr
销毁时,分离的执行线程将不会发生任何事情。
这是不好的做法,因为您可以简单地写...
std::thread{[]{ std::cout<< "HelloWorld" << std::endl; }}.detach();
...要产生一个自身清理的背景线程。
相关文章:
- 如何比较自定义类的std::变体
- std::设置自定义比较器
- std::ranges::elements_view,用于自定义类似元组的数据
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 为constchar*定义std::begin合法吗
- std::带有自定义缓冲区的 iostream 不允许我写入
- istream std::cin如何修改自定义istream缓冲区
- 使用模板化的键类型定义 std::map,该键类型基于作为参数接收的函数
- 如何在创建自定义迭代器时获得 std::p air 的第一个和第二个?
- 修改"std::set"中用户定义类型的值
- 如果我重新定义 sqrt 函数,为什么使用 std::sqrt 失败?
- 未定义的引用,尽管存在符号,但 std::experimental::可选
- 将用户定义的类型与 std::vector 和 std::sort 一起使用
- 在 C++20 中是否不再允许在 std 中对程序定义类型的函数模板进行专用化?
- 体系结构x86_64的未定义符号:std:terminate(),typeinfo,运算符delete[],运算符new
- std::shared_ptr 自定义参考计数器
- 对 'std::thread::_M_start_thread CMake 的未定义引用进行基准测试
- 在自定义 std::vector-like 容器中处理指针和非指针模板类型的最佳方法是什么?
- = 未为 std 定义::使用 const 字符串时搜索
- 其中是命名空间std定义的