#include "windows.h"
#include "stdio.h"DWORD WINAPI fun1(
LPVOID lpParameter
);int main(int argc, char* argv[])
{
HANDLE hTread = CreateThread(NULL,0,fun1,NULL,0,NULL);
printf("Main fun run!\n");
int y=0;
for(int x=0;x<1000000;x++)
y++;
return 0;
}DWORD WINAPI fun1(
LPVOID lpParameter
)
{
//int i=100;
while(true)
printf("fun1 run\n");
return 0;
}运行结果有时候是先两个Main fun run!,再多个fun1 run,有时候是一个Main fun run!,在多个fun1 run,解释下怎么会首先出现两个Main fun run
#include "stdio.h"DWORD WINAPI fun1(
LPVOID lpParameter
);int main(int argc, char* argv[])
{
HANDLE hTread = CreateThread(NULL,0,fun1,NULL,0,NULL);
printf("Main fun run!\n");
int y=0;
for(int x=0;x<1000000;x++)
y++;
return 0;
}DWORD WINAPI fun1(
LPVOID lpParameter
)
{
//int i=100;
while(true)
printf("fun1 run\n");
return 0;
}运行结果有时候是先两个Main fun run!,再多个fun1 run,有时候是一个Main fun run!,在多个fun1 run,解释下怎么会首先出现两个Main fun run
fun1 run,如果没抢到,main就退出去了,程序都关了,当然线程也就强行退出去了,
main中的for并不能释放main所抢的CPU片,可能要等main执行完了,线程才能抢到CPU片,而此时main已经退出
可能是某次新线程先抢到了时间片(在printf("Main fun run!\n");之前),主线程printf后退出。
接下来的一次是主线程先抢到了时间片,先printf,再由新线程printf,最后由主线程退出。
所以看上去恰好两个"Main fun run!"在一起。
你没有采取线程同步的措施,应该会出现这样的情况。