生成std :: thread时的shared_ptr参考计数

星号

我对C ++ 11中的多线程有些陌生,并且对生成std::threads有一个特定的问题,如下所示。Notes是其中包含公共方法的类start并且thread_list是持有std::threads的向量

void spawn()
{
    std::shared_ptr<Notes> note = std::make_shared<Notes>();
    std::thread thrd(&Notes::start, note);
    thread_list.push_back(std::move(thrd));
}

我的问题是shared_ptr note此功能完成后谁拥有对线程thrd的引用是否作为引用计数,因此shared_ptr不会破坏对象引用?任何澄清将不胜感激。

玉米秸秆

我的问题是shared_ptr note此功能完成后谁拥有

thrd以某种方式拥有它。但事实并非如此。继续阅读,了解真正发生的情况。

对线程thrd的引用是否作为引用计数,因此shared_ptr不会破坏对象引用?

有点,但不是真的。thrd实际上并不算作参考,也实际上并不共享的所有权note它只是线程的句柄。

那么谁拥有noteNotes::start功能可以

您已经启动了一个正在执行的线程Notes::start,并已传递notes给该函数。该功能现在拥有notes

如果thrd超出范围,notes只要该Notes::start函数尚未退出并且没有放弃对的所有权,它仍然会存在notes

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++ std :: shared_ptr参考的reinterpret_cast优化

来自分类Dev

使用std :: shared_ptr而不是boost :: shared_ptr时编译失败

来自分类Dev

使用make_shared <std :: thread>创建shared_ptr <std :: thread>的实例

来自分类Dev

std :: shared_ptr在复制对象时引起问题

来自分类Dev

QVariant与std :: shared_ptr

来自分类Dev

QVariant与std :: shared_ptr

来自分类Dev

std :: move(const shared_ptr参考)是什么意思?

来自分类Dev

使用std :: move与std :: shared_ptr

来自分类Dev

使用std :: shared_ptr和std :: thread的编译器错误

来自分类Dev

使用std :: shared_ptr和std :: thread的编译器错误

来自分类Dev

将std :: shared_ptr传递给函数对象到std :: thread

来自分类Dev

使用XCode / Clang用std :: shared_ptr实例化std :: map时出错

来自分类Dev

std :: shared_ptr和继承

来自分类Dev

std :: shared_ptr深层复制对象

来自分类Dev

std :: function和shared_ptr

来自分类Dev

使用* this作为std :: shared_ptr

来自分类Dev

数据与memcpy的std :: shared_ptr分配

来自分类Dev

std :: shared_ptr预分配内存

来自分类Dev

std set of boost :: shared_ptr <string>

来自分类Dev

可重用的std :: shared_ptr

来自分类Dev

std :: shared_ptr深层复制对象

来自分类Dev

数据与memcpy的std :: shared_ptr分配

来自分类Dev

使用* this作为std :: shared_ptr

来自分类Dev

std :: shared_ptr初始化

来自分类Dev

如何访问std :: shared_ptr的内容?

来自分类Dev

std :: shared_ptr删除者类型

来自分类Dev

移动 std::shared_ptr 的函数声明

来自分类Dev

禁用 std::shared_ptr 的清理

来自分类Dev

了解传递给函数时的shared_ptr参考计数何时增加