发一个很久以前遇到的线程死锁例子

#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函数。一旦实际环境中出现这种死锁,是很不好查的!

你可能感兴趣的:(发一个很久以前遇到的线程死锁例子)