使用指针线程化共享模型

我有一个指向使用new创建的对象的指针。多个线程以安全的方式使用各种gets / sets访问此向量。但是,线程可能会删除其中一个对象,在这种情况下,另一个线程指向该对象的指针不再有效。方法如何知道指针是否有效?选项1和2实际上似乎运作良好。我不知道他们将如何扩展。什么是最好的方法?是否有便携版3? 测试有效的指针有效性示例: 1.使用整数而不是指针。哈希(std :: map)检查指针是否仍然有效。公共方法如下:
get(size_t iKey)
{
   if((it = mMap.find(iKey)) != mMap.end())
   {
       TMyType * pMyType = it->second;
       // do something with pMyType
   }
}
2.有一个shared_ptr的向量。每个线程都尝试在其weak_ptr上调用lock()。如果返回的shared_ptr为null,我们知道有人在我们等待时删除了它。公共方法如下:
get(boost::weak_ptr<TMyType> pMyType)
{
    boost::shared_ptr<TMyType> pGOOD = pMyType.lock();
    if (pGOOD  != NULL)
    {
         // Do something with pGOOD
    }
} 
3.在普通原始指针上测试null?这可能吗?
get(TMyType * pMyType)
{
    if(pMyType != NULL){ //do something }
}
    
已邀请:
#3不起作用。删除指针并将其设置为NULL不会影响指向同一对象的其他指针。使用原始指针无法检测对象是否被删除。 #1实际上是指向指针的指针。如果您始终通过该指针访问它并能够锁定它。如果没有,如果在成功获取后在另一个线程中删除了会发生什么? #2是这种想法的标准实现,并且该模式在许多库中使用。锁定手柄,获得指针。如果你得到它,请使用它。如果没有,它就消失了。     

要回复问题请先登录注册