我想在多线程程序中实现对象的引用计数,以便我可以删除该对象,当任何线程都不想使用它或某个人启动该对象时删除。多线程应用程序中的对象的引用计数C++
因为我正在做以下事情。
class refCount{
int ref_count;
pubic:
void incr_ref_count(){
ref_count ++;
}
int decr_ref_count(){
ref_count--;
return ref_count;
}
}
当我在不同的线程中复制obj时,我正在使用以下代码。
pthread_mutex_lock(&ref_count_lock);
if(obj != NULL){
dup_obj = obj;
obj.incr_ref_count();
}
pthread_mutex_unlock(&ref_count_lock);
,并在除去参考
pthread_mutex_lock(&ref_count_lock);
if(dup_obj != NULL){
count = dup_obj.decr_ref_count();
if(count == 0)
delete dup_obj
}
pthread_mutex_unlock(&ref_count_lock);
我希望它会正常工作,但我认为这个问题我甲肝使用mutexs(锁定),我需要有一个互斥体(锁)为我创建的每个对象单独创建,以便我可以使这种应对和计数的增加或减少可以是原子的。如何实现这一点。
请注意它不完全是一个工作的代码,它有点sudo代码。
感谢您的帮助。
boost和C++ 11都有一个可以使用的引用计数对象。 –
互斥体是非常昂贵和重量级的。对于参考计数,你应该看看原子。 –