マルチスレッド プログラムでオブジェクトの参照カウントを実装しようとしています。これにより、どのスレッドもオブジェクトを使用したくない場合、または誰かがオブジェクトの削除を開始した場合にオブジェクトを削除できます。
そのために、次のことを行っています。
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);
私はそれがうまくいくことを望んでいましたが、私が抱えている問題はミューテックス(ロック)の使用にあると思います。コピーを作成したり、増やしたりできるように、個別に作成するオブジェクトごとにミューテックス(ロック)が必要です。アトミックになるようにカウントを減らします。これを実装する方法は?
正確には動作するコードではなく、sudo コードのようなものであることに注意してください。
すべての助けに感謝します。