C++ 在析构函数中获取互斥体以防止删除自身的对象
这个概念行得通吗C++ 在析构函数中获取互斥体以防止删除自身的对象,c++,multithreading,mutex,C++,Multithreading,Mutex,这个概念行得通吗 class MyClass { public: ~MyClass() { MyMutex.acquire(); } void ThreadFunction(void* param) { MyMutex.acquire(); //do something MyMutex.release(); } }; 另外,假设我们有一个此类的对象,称它为
class MyClass
{
public:
~MyClass()
{
MyMutex.acquire();
}
void ThreadFunction(void* param)
{
MyMutex.acquire();
//do something
MyMutex.release();
}
};
另外,假设我们有一个此类的对象,称它为“inst”
我试图实现的是,如果:
- 一个线程处于活动状态并执行
inst->ThreadFunction
- 另一个线程正在调用
,则此调用将挂起,直到ThreadFunction释放互斥锁delete inst
这样做可以吗?如果
MyClass
包含资源,那么最好在MyClass
周围创建一个包装器。如果程序使用从MyClass
继承的类,则情况更糟,因为此时已调用了ChildofMyClass
的析构函数。如果MyClass
包含资源,则最好在MyClass
周围创建一个包装器。如果程序使用从MyClass
继承的类,则情况更糟,因为此时已调用了ChildofMyClass
的析构函数。如果MyClass
包含资源,则最好在MyClass
周围创建一个包装器。如果程序使用从MyClass
继承的类,则情况更糟,因为此时已调用了ChildofMyClass
的析构函数。如果MyClass
包含资源,则最好在MyClass
周围创建一个包装器。如果程序使用从MyClass
继承的类,则情况会更糟,因为此时已调用了ChildofMyClass
的析构函数。阻止删除哪个对象?@ChrisLaplante I编辑了标题它并没有阻止删除。它只是在等待MyMutex被获取。@dbasic Yes这是一个想法。。。可以吗?woolstar已经提出了几点。阻止删除哪一个对象?@chrislaplate我编辑了标题,但没有阻止删除。它只是在等待MyMutex被获取。@dbasic Yes这是一个想法。。。可以吗?woolstar已经提出了几点。阻止删除哪一个对象?@chrislaplate我编辑了标题,但没有阻止删除。它只是在等待MyMutex被获取。@dbasic Yes这是一个想法。。。可以吗?woolstar已经提出了几点。阻止删除哪一个对象?@chrislaplate我编辑了标题,但没有阻止删除。它只是在等待MyMutex被获取。@dbasic Yes这是一个想法。。。这样可以吗?伍尔斯塔已经提出了几点。