我试图在多线程程序中实现对象的引用计数,以便在没有任何线程想要使用它时,或者有人启动对象删除时,我可以删除该对象。

为此,我正在做以下事情:

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代码。

感谢所有的帮助。

===============>>#1 票数:3

锁会杀死引用计数性能。 有关减少或消除所需锁定数量的方法,请参阅例如Atomic Reference Counting Pointers

===============>>#2 票数:1

对于要保护的每个对象实例,您不一定需要单独的锁定对象。 如果对所有对象实例使用一个锁定对象,则可以保证一次只有一个线程可以操作引用计数。 拥有多个锁定对象只会降低线程阻塞的频率。

  ask by bana translate from so

未解决问题?本站智能推荐: