生成std :: thread时的shared_ptr引用计数

时间:2016-02-08 05:31:08

标签: c++ multithreading c++11

我对C ++ 11中的多线程有点新兴,我有一个关于产生std::thread的具体问题,如下所示。 Notes是一个包含公共方法start的类。 thread_list是一个持有std::thread s。

的向量
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不会破坏对象引用?任何澄清将不胜感激。

1 个答案:

答案 0 :(得分:3)

  

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

thrd在某种程度上拥有它。但不是真的。继续阅读实际情况。

  

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

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

那么谁拥有note Notes::start功能

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

如果thrd超出范围,只要notes函数没有退出并且没有放弃{{1}的所有权,Notes::start仍然存在}}