线程的起步疑问
线程的启动疑问
以上是代码,问题:
1、循环1和循环2上限相同时,'A''d'交替输出,为何循环1数值较大时并不是20个'A'10个'd'?
2、如何再用如上方法(只涉及CreateThread)创建线程并输出'H',是否也需要在新创建的线程中建立index的循环?
------解决方案--------------------
要线程同步
------解决方案--------------------
1.你的主线程和FunProc线程公用一个计数器(index)
你自己数一下,A和d加起来是不是20个?
2.看你这个线程的使用目的,如果你想这个线程启动之后一直在那里做循环可以用个while(1 && key)
然后你想退出这个循环的时候可以在其他地方把key改成0就行
------解决方案--------------------
event实现线程同步
------解决方案--------------------
你需要加上线程同步的方式来控制各个线程打印顺序
------解决方案--------------------
没有线程同步,两个线程同用一index会出现很多情况
#include<stdio.h>
#include<windows.h>
DWORD WINAPI FunProc(LPVOID lp);
int index =0;
int main()
{
HANDLE hThread1;
hThread1 = CreateThread(NULL,0,FunProc,NULL,0,NULL);
CloseHandle(hThread1);
while(index++<20) /*循环1*/
printf("A\n");
return 0;
}
DWORD WINAPI FunProc(LPVOID lp)
{
while(index++<10) /*循环2*/
{
printf("d\n");
}
return 0;
}
以上是代码,问题:
1、循环1和循环2上限相同时,'A''d'交替输出,为何循环1数值较大时并不是20个'A'10个'd'?
2、如何再用如上方法(只涉及CreateThread)创建线程并输出'H',是否也需要在新创建的线程中建立index的循环?
------解决方案--------------------
要线程同步
------解决方案--------------------
1.你的主线程和FunProc线程公用一个计数器(index)
你自己数一下,A和d加起来是不是20个?
2.看你这个线程的使用目的,如果你想这个线程启动之后一直在那里做循环可以用个while(1 && key)
然后你想退出这个循环的时候可以在其他地方把key改成0就行
------解决方案--------------------
event实现线程同步
------解决方案--------------------
你需要加上线程同步的方式来控制各个线程打印顺序
------解决方案--------------------
没有线程同步,两个线程同用一index会出现很多情况