我有一个类对象,它的函数可以从不同的线程调用。
有可能进入Thread1(T1)调用析构函数的情况,
而 Thread(T2) 正在同一对象上执行一些其他函数。
假设 T1 能够先调用析构函数,那么 T2 中运行的代码会发生什么?
它会产生崩溃还是因为对象已经被销毁,成员函数将停止运行?
在所有类函数的入口处采用互斥锁并在导出处解锁是否可以确保在析构函数和成员函数之间发生的任何类型的竞争中都不会崩溃?
感谢您的帮助!
最佳答案
没有。因为逻辑有问题。如果 T1 有可能调用析构函数,则互斥锁不会阻止它仍然尝试这样做。
T1 和 T2 之间存在共享数据,因此您必须确保两者都不会尝试调用不存在的共享对象上的方法。
单独使用互斥锁无济于事。
关于C++ 多线程 : What happens if destructor and member function are running in separate threads,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33068065/