您的位置:首页 > 职场人生

子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环10 次(线程面试:windows下实现)

2012-10-27 15:15 232 查看
浏览MoreWindows的文章写出来的
/article/1358224.html
#include<stdio.h>
#include<process.h>
#include<windows.h>

unsignedint__stdcallFun(void*pPM);
constintTHREAD_NUM=1;

//循环次数
constintLOOP=6;

//两个互斥事件
HANDLEg_hThreadEvent1;
HANDLEg_hThreadEvent2;

intmain()
{
printf("\t子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,\n接着再回到主线程又循环100次,如此循环50次\n");

inti=0,j;
HANDLEhdl[THREAD_NUM];

g_hThreadEvent1=CreateEvent(NULL,FALSE,FALSE,NULL);
g_hThreadEvent2=CreateEvent(NULL,FALSE,TRUE,NULL);

hdl[0]=(HANDLE)_beginthreadex(NULL,0,Fun,NULL,0,NULL);

for(i=0;i<LOOP;i++)
{
WaitForSingleObject(g_hThreadEvent1,INFINITE);

for(j=0;j<4;j++)
{
printf("主要线程编号是,在循环第%d次\n",j+1);
}
SetEvent(g_hThreadEvent2);
Sleep(200);

}

CloseHandle(g_hThreadEvent2);
CloseHandle(g_hThreadEvent1);

for(i=0;i<THREAD_NUM;i++)
CloseHandle(hdl[i]);

return0;
}

unsignedint__stdcallFun(void*pPM)
{
intnum=0;
inti=0;

for(i=0;i<LOOP;i++)
{
WaitForSingleObject(g_hThreadEvent2,INFINITE);

for(num=0;num<2;num++)
{
printf("线程编号是%d,在循环第%d次\n",GetCurrentThreadId(),num+1);
}

SetEvent(g_hThreadEvent1);
}
return0;
}




第二题:我觉得有汇编基础的人应该能很快知道答案是50-100

一个全局变量tally,两个线程并发执行(代码段都是ThreadProc),问两个线程都结束后,tally取值范围。

inttally=0;//glable

voidThreadProc()

{

for(inti=1;i<=50;i++)

tally+=1;

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐