在进行简单的多线程创建学习时,遇到了以下疑惑
当代码如下,试验多次后全局变量改变并无问题
#include "stdio.h"
#include <process.h>
#include "windows.h"
int num;
unsigned int _stdcall Init(PVOID lpParam)
{
//Sleep(100);
num=num++;
//Sleep(50);
return 0;
}
int main()
{
const int Thread_Num=50;
int num1=20;
while(num1--){
num=0;
HANDLE handle[Thread_Num];
for(int i=0;i<Thread_Num;i++)
{
handle[i]=(HANDLE)_beginthreadex(NULL,0,Init,NULL,0,NULL);
}
WaitForMultipleObjects(Thread_Num,handle,TRUE,INFINITE);
printf("线程ID号为%4d的子线程报数%d\n",GetCurrentThreadId(),num);
}
return 0;
}
而当在线程入口处两个sleep注释掉后 结果为这样
为什么会这样呢?留个疑问以后解答