一个对象在析构函数中获取互斥以防止删除它自己

An object acquiring mutex in destructor to prevent deletion of itself

本文关键字:删除 它自己 析构函数 获取 一个对象      更新时间:2023-10-16

这个概念能起作用吗?

class MyClass
{
public:
    ~MyClass()
     {
         MyMutex.acquire();
     }
     void ThreadFunction(void* param)
     {
          MyMutex.acquire();
          //do something
          MyMutex.release();
     }
};

假设我们有一个此类的对象,称之为"inst"

我试图实现的是,如果:

  • 一个线程处于活动状态并执行inst->ThreadFunction
  • 另一个线程正在调用delete inst,则此调用将挂起,直到ThreadFunction释放互斥对象

这样可以吗?

如果MyClass包含资源,那么在MyClass周围创建一个包装器会更好。如果程序使用从MyClass继承的类,情况会更糟,因为此时ChildofMyClass的析构函数已经被调用。