最近写了了个问题很多的多线程程序,在里面我没有使用互斥对象,用它来探索多线程程序到底是如何运行的,在众多网友的帮助下,得到了很多有意义的结果,现整理如下。(如果有错误的观点,敬请批判)首先说明,我的笔记本是双核的,编译器是VS2010:
int main()
{
HANDLE hThread =(HANDLE) _beginthreadex(NULL, 0, Fun1Proc, NULL, 0, NULL);
CloseHandle(hThread);
cout<<"main thread is running"<<endl;
return 0;
}
unsigned int __stdcall Fun1Proc( LPVOID lpParameter)
{
cout<<"thread1 is running!"<<endl;
return 0;
}
这个程序有两种可能的执行结果:
main thread is runningthread1 is running!
请按任意键继续. . .
或者是:
main thread is running
请按任意键继续. . .
是为什么呢?我们先分析第二种:执行main函数的主线程,执行完后直接就结束了,Fun1Proc线程根本没有执行的机会。再看第一种:当主线程执行完cout<<"main thread is running"后,并没有执行后面的内容,然后就跳到了Fun1Proc线程,执行了cout<<"thread1 is