使用指针线程化共享模型
我有一个指向使用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 }
}
没有找到相关结果
已邀请:
1 个回复
搂腹时