我有一个关于boost::shared_ptr<T>
.
有很多线程。
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);
//...
第一季度
如果Thread_A不关心nowResource
是最新的,这部分代码会有问题吗?
我的意思是当Thread_B不SetResource()
完全时,Thread_A得到一个错误的智能点GetResource()
?
第二季度
线程安全是什么意思?
如果我不关心资源是否是最新shared_ptr<CResource> nowResource
的,释放时程序会崩溃nowResource
还是问题会破坏shared_ptr<CResource>
?