У меня вопрос о 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_B не полностью SetResource()
, Thread_A получает неправильную интеллектуальную точку GetResource()
?
Q2
Что такое поточно-безопасное?
Если мне неинтересно, является ли ресурс новейшим, будет ли shared_ptr<CResource> nowResource
сбой программы при отпускании nowResource
или проблема будет уничтожена shared_ptr<CResource>
?