慎用TerminateThread

来源:互联网 发布:恐怖小说推荐知乎 编辑:程序博客网 时间:2024/04/30 12:03
using namespace yaogl;ThreadMutexg_mutex;voidtellme(void* p){for (int i = 0;i < 100; ++i){ThreadAutoMutexmutex(g_mutex);printf("%d/n",i);}}int _tmain(int argc, _TCHAR* argv[]){ThreadFactorycf1;ThreadFactorycf2;cf1.Create(&tellme,NULL,true);cf2.Create(&tellme,NULL,true);cf1.Resume();cf2.Resume();Sleep(5);cf1.Kill();cf2.WaitForFinish();return 0;}
  这里有个比较隐蔽的死锁问题,当cf2被Kill的时候(TerminateThread),线程没有机会做清理工作,也就说说加锁后、解锁前线程可能被Kill掉,这样的话进入死锁状态。尽管我使用了AutoMutex,问题依然很明显,这说明,TeminateThrad是个非常可怕的东东。
原创粉丝点击