在销毁对象时运行方法

Wer*_*lik 4 c++ methods multithreading destructor

几天前,我的朋友告诉我他们的项目情况.有人认为,破坏NotVerySafeClass并行线程的对象(如异步)会很好.它是在不久前实施的.现在它们崩溃了,因为在主线程中调用了一些方法,而对象被销毁了.创建了一些解决方法来处理这种情况.

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

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

Pla*_*aHH 7

不,不,不.这是一个基本的设计问题,它在考虑多线程情况和一般竞争条件时表现出一种常见的误解.

有一两件事是可以发生的可能性相同,这是真的表明你需要一个所有权的概念:该函数调用线程可以调用函数的对象已被破坏刚过权,所以没有对象了,并尝试调用它上面的函数是UB,由于该对象不再存在,它也没有机会阻止dtor和成员函数之间的任何交互.