有TerminalThread的替代方式吗?
一般在处理线程的时候最好不要使用TerminalThread函数,因为这样会造成堆栈被破坏。但是在有些情况下,要马上结束线程,就只有调用TerminalThread。请问,有能达到TerminalThread的效果而没有它的副作用的方式吗?
yidanpu
12 years, 10 months ago
Answers
TerminalThread 会带来以下问题:
- 未释放互斥区,造成死锁(整个进程在分配和回收内存时,都要用同一把锁。如果一个线程在占用该锁时被杀死(即临死前该线程在new或delete操作中),其他线程就无法再使用new或delete了,表现为hang住)
- 未释放堆分配锁,造成死锁(同上)
- 在执行内核函数时退出,造成该线程所在进程状态不确定,程序可能崩溃
- 在使用DLL时退出,造成DLL被销毁,其他使用该DLL得程序可能出现问题!
怎么解决呢:
两种解法:
- 用同步机制来控制线程退出,如果同步机制被唤醒,由线程自己来执行资源释放和退出纯种的功能。
- 定时检查,每隔一段时间去检查一个标志,当标志被改时,自动退出
kudeng
answered 12 years, 10 months ago