#include <windows.h>
#include <stdio.h>
#include <process.h>
unsigned __stdcall thread(void*)
{
while(1)
{
printf("t");
}
}
int main()
{
unsigned dwThreadId;
HANDLE hThread = (HANDLE) _beginthreadex(NULL, 0, thread, NULL, 0, &dwThreadId);
while(1) {
SuspendThread(hThread);
printf(".");
ResumeThread(hThread);
}
return 0;
}
- 现象:
线程与主线程会在printf处死锁
- 原因:
printf内部会系统加锁,由于SuspendThread函数会在任意时刻都会挂起线程,一旦子线程挂起时还没有释放锁,主线程调用printf就会陷入无限等待中。TerminateThread也有此问题。
- 总结:
不要轻易使用SuspendThread、TerminateThread函数。一旦实际环境中出现这种死锁,是很不好查的!