在析构函数中获取互斥锁的对象,以防止删除自身

时间:2013-12-07 05:20:53

标签: c++ multithreading mutex

这个概念能起作用吗?

class MyClass
{
public:
    ~MyClass()
     {
         MyMutex.acquire();
     }

     void ThreadFunction(void* param)
     {
          MyMutex.acquire();
          //do something
          MyMutex.release();
     }

};

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

我想要实现的是:if:

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

可以吗?

1 个答案:

答案 0 :(得分:3)

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