我正在尝试在多线程程序中实现对象的引用计数,以便在没有线程想要使用它或有人启动对象删除时删除该对象。
为此,我正在执行以下操作:
class refCount{
int ref_count;
public:
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);
我希望它能正常工作,但我认为我遇到的问题是使用互斥锁(Lock),我需要为我单独创建的每个对象都有一个互斥锁(Lock),以便我可以进行复制,并增加或减少计数,是原子的。如何实施?
请注意,它不完全是一个工作代码,它有点 sudo 代码。
感谢所有的帮助。