收集遇到的关于线程的问题,主要是结束时会碰到的问题。
1. TerminateThread强制结束线程导致死锁。
来源:http://topic.youkuaiyun.com/u/20110310/20/9128db6a-66a1-42f4-b7c7-c0c5af5d1cfd.html
问题描述:当某种情况下,需要结束线程时,使用TerminateThread 强制结束线程,发生死锁现象。
解释:TerminateThread可能会产生不可预料结果的情况,如果一个线程正在用new或delete的时候被Terminate了,那这个程序再遇到用new或都delete的时候就会发生死锁。因为new和delete操作会使用资源锁进行控制,而TerminateThread是强行终止线程,造成锁没有被释放,所以再次调用new或delete时就发生死锁。同样的道理,如果结束时,线程正在进行某些带锁的操作,也会发生死锁。
解决方法:加状态量,需要退出时,优雅的执行。