我对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
不会破坏对象引用?任何澄清将不胜感激。
答案 0 :(得分:3)
我的问题是在此功能完成后谁拥有
shared_ptr note
?
thrd
在某种程度上拥有它。但不是真的。继续阅读实际情况。
对线程
thrd
的引用是否计为引用,因此shared_ptr
不会破坏对象引用?
有点但不是真的。 thrd
实际上并不算作参考,实际上并不分享note
的所有权。它只是一个线程的句柄。
那么谁拥有note
? Notes::start
功能。
您已启动正在执行Notes::start
的线程,并已将notes
传递给该函数。该功能现在拥有notes
。
如果thrd
超出范围,只要notes
函数没有退出并且没有放弃{{1}的所有权,Notes::start
仍然存在}}