using namespace yaogl;
ThreadMutex g_mutex;
void tellme(void* p)
{
for (int i = 0;i < 100; ++i)
{
ThreadAutoMutex mutex(g_mutex);
printf("%d/n",i);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
ThreadFactory cf1;
ThreadFactory cf2;
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是个非常可怕的东东。
慎用TerminateThread
最新推荐文章于 2021-05-24 02:42:25 发布