前几天定位一个问题,发现是线程结束不当造成的内存泄漏。定位解决完成后,突然想起梁的这本书。我翻到他的关于线程的一段的描述:“当用
_beginThread
来创建,而用
CloseHandle
来关闭线程时,这时复制的全局结构就不会被释放了,这就有了内存的泄漏。……”对于这段描述其实是不全面的;如果在
C
++里面强行中止一段线程;线程中的临时对象也不会去调用自己的悉构函数来释放资源的,也就是说,强行中止一段线程不是一种安全的做法,真正好的做法不是用系统提供的
API
来结束线程,而是要用自己可控制的循环变量来调节线程,这才能构做到线程的安全中止。在c里面有一个叫做longjmp的API,如果在CPP函数体内调用此函数也会出现相同的漏洞。
线程删除
最新推荐文章于 2024-04-29 11:01:02 发布