C++ 多线程 : What happens if destructor and member function are running in separate threads

标签 c++ linux multithreading c++11

我有一个类对象,它的函数可以从不同的线程调用。

有可能进入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/

相关文章:

c++ - 简单但频繁使用 std::stringstream 是否过早悲观?

linux - 为什么使用 GOT 引用共享对象中定义的非静态全局变量?

c++ - 提高 C++ 中非常大常量的可读性

c++ - 钻石方形算法创建对角线切割

linux - GLIB:g_atomic_int_get 变成 NO-OP?

linux - Rkt pod 立即退出(没有日志)

multithreading - 用餐哲学家问题中的饥饿

java - JBOSS EAP 6 在异步方法之后阻止调用 ejb 方法

python - 使用 QRunnable 进行线程处理 - 发送双向回调的正确方式

c++ - 求毕达哥拉斯三元组,总和为1000,没有错误但没有运行