帮忙看段简单的程序!该怎么解决

帮忙看段简单的程序!
程序如下:
#include   <stdio.h>
#include   <windows.h>

DWORD   WINAPI   HelloFunc(LPVOID   arg)
{
int   *a   ;
a   =   (int*   )   (arg);

printf( "Helle   func!%d\n ",*a);
return   0   ;
}

void   main()
{

int   a[1];

LPVOID   arg;

HANDLE     hThread[4];

for(int   index   =   0;   index   <   4;   index++)
{
*a   =   index;
arg   =   (LPVOID)a;

hThread[   index   ]   =  
CreateThread(NULL,0,HelloFunc,arg,0,NULL);
//Sleep(1);
}

Sleep(20);

}
我运行了很多次,为什么输出总是:
Helle   func!3
Helle   func!3
Helle   func!3
Helle   func!3




------解决方案--------------------
解决办法是将注释掉的Sleep(1);改为Sleep(0);

原因是在
for(int index = 0; index < 4; index++)
{
*a = index;
arg = (LPVOID)a;

hThread[ index ] =
CreateThread(NULL,0,HelloFunc,arg,0,NULL);
//Sleep(1);
}
这个循环中没有线程切换,等这个循环结束后,a[0]的值是3,切换到CreateThread的4个线程中的某个时,它打印a[]中的值,当然是3。
------解决方案--------------------
楼上说得有一定道理,不过即使按上面的修改也不一定行,因为就线程何时被调度我们根本无法控制