O thread shared_ptr <XXX> é seguro?
Eu tenho uma pergunta sobreboost::shared_ptr<T>
.
Há muita discussão.
using namespace boost;
class CResource
{
// xxxxxx
}
class CResourceBase
{
public:
void SetResource(shared_ptr<CResource> res)
{
m_Res = res;
}
shared_ptr<CResource> GetResource()
{
return m_Res;
}
private:
shared_ptr<CResource> m_Res;
}
CResourceBase base;
//----------------------------------------------
// Thread_A:
while (true)
{
//...
shared_ptr<CResource> nowResource = base.GetResource();
nowResource.doSomeThing();
//...
}
// Thread_B:
shared_ptr<CResource> nowResource;
base.SetResource(nowResource);
//...
Q1E se Thread_A não me importo com onowResource
é o mais novo, esta parte do código tem algum problema?
Quero dizer quando Thread_B nãoSetResource()
completamente, Thread_A obtenha um ponto inteligente errado porGetResource()
?
O que significa thread-safe?
Se eu não me importo se o recurso é mais novo, oshared_ptr<CResource> nowResource
travar o programa quando onowResource
for lançado ou o problema destruirá oshared_ptr<CResource>
?