StackOverlow 6年前也有人讨论过这个问题,有人回答得很清楚
stackoverflow dot com /questions/53818859/a-dll-should-free-heap-memory-only-if-the-dll-is-unloaded-dynamically
那就是即使你不用TerminateThread()显式去杀线程,ExitProcess()这个OS API或者系统调用的内部实现也会去把当前线程之外的线程全都给强杀了
线程被强杀时,它可能处于任意代码的执行位置,比如对于多个线程间共享的数据,它只处理了一半,这就会导致数据不一致,或者说不能满足预期的invariant。然后其他线程再去尝试访问这些残破的数据,不知道会发生什么。那么最直接的规避,就要避免去访问残破的数据。
但是最好的规避,是任何时候自己不主动杀线程,也不让ExitProcess()去杀线程。
--
FROM 114.254.115.*