我对C ++ 11中的多线程有些陌生,并且对生成std::thread
s有一个特定的问题,如下所示。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
不会破坏对象引用?任何澄清将不胜感激。
我的问题是
shared_ptr note
此功能完成后谁拥有?
thrd
以某种方式拥有它。但事实并非如此。继续阅读,了解真正发生的情况。
对线程
thrd
的引用是否作为引用计数,因此shared_ptr
不会破坏对象引用?
有点,但不是真的。thrd
实际上并不算作参考,也实际上并不共享的所有权note
。它只是线程的句柄。
那么谁拥有note
?该Notes::start
功能可以。
您已经启动了一个正在执行的线程Notes::start
,并已传递notes
给该函数。该功能现在拥有notes
。
如果thrd
超出范围,notes
只要该Notes::start
函数尚未退出并且没有放弃对的所有权,它仍然会存在notes
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句