c++ - 销毁对象时运行方法

标签 c++ multithreading methods destructor

前几天 friend 跟我说了他们项目中的情况。 有人决定,最好在并行线程(如异步)中销毁 NotVerySafeClass 的对象。它是前一段时间实现的。 现在他们崩溃了,因为在主线程中调用了一些方法,而对象被销毁了。 已创建一些解决方法来处理这种情况。

当然,这只是一个不太好的解决方案的例子,但问题仍然存在:

有没有办法在 NotVerySafeClass 内部防止这种情况(拒绝运行 methods,如果 destructor 已经被调用,并强制destructor 等待,直到任何正在运行的 method 结束(假设只有一个 method))?

最佳答案

不,不,不。这是一个基本的设计问题,它显示了在考虑多线程情况和一般竞争条件时的常见误解。

有一件事发生的可能性相同,这确实表明您需要一个所有权概念:函数调用线程可以在对象被销毁后立即调用该函数,因此不再有对象并尝试在其上调用函数是 UB,并且由于该对象不再存在,它也没有机会阻止 dtor 和成员函数之间的任何交互。

关于c++ - 销毁对象时运行方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7399316/

相关文章:

python - mpi4py中哪些操作是 "synchronization"操作

go - 方法在结构副本上的应用反射(reflect)在原始结构中

c++ - 带有 restclient-cpp 的 JSON 属性树

c++ - fftw 中的 convfft() 调用导致崩溃。是关于不正确的库链接吗?

java - 在 android AsyncTask 中获取数据并更新 UI View

Java volatile 修饰符和同步块(synchronized block)

java - 方法 sum(int, int, int, int) 不适用于参数 (int)

Java:查找数组中 double 的平均值

c++ - boost .Python : Ownership of pointer variables

c++ - 递归显式模板实例化是否可能?