Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在析构函数中获取互斥体以防止删除自身的对象_C++_Multithreading_Mutex - Fatal编程技术网

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
  • 另一个线程正在调用
    delete inst
    ,则此调用将挂起,直到ThreadFunction释放互斥锁


这样做可以吗?

如果
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这是一个想法。。。这样可以吗?伍尔斯塔已经提出了几点。