について質問があり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);
//...
Q1
Thread_Aが最新であることを気にしない場合nowResource
、コードのこの部分に問題はありますか?
つまり、 Thread_BSetResource()
が完全ではない場合、 Thread_Aは間違ったスマート ポイントを取得しGetResource()
ます。
Q2
スレッドセーフとはどういう意味ですか?
リソースが最新かどうかを気にしないshared_ptr<CResource> nowResource
場合、 がリリースされたときにプログラムがクラッシュするか、それともnowResource
問題によって が破壊されshared_ptr<CResource>
ますか?