现在的位置: 首页 > 综合 > 正文

经典线程同步问题(一)

2018年02月09日 ⁄ 综合 ⁄ 共 768字 ⁄ 字号 评论关闭

问题:

子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次,试写出代码。

 

解答:这里我们将题简化为 “子线程循环2次,接着主线程循环 4次,接着又回到子线程循环 2次,接着再回到主线程又循环 4 次,如此循环5次,试写出代码”

HANDLE g_eventMain;
HANDLE g_eventSon;
unsigned int __stdcall threadFunc(LPVOID param)
{
	
	for(int j =0; j<5; ++j)
	{//这里子线程也要有一个对总输出次数的循环控制
		WaitForSingleObject(g_eventMain,INFINITE);
		for (int i = 0; i<2; ++i)
		{
			cout <<"   子线程输出"<<i <<endl;
		}
		SetEvent(g_eventSon);

	}
	
	return 0;
}
int main(int argc,char ** argv)
{

	g_eventMain = CreateEvent(NULL,false,true,NULL);
	g_eventSon = CreateEvent(NULL,false,false,NULL);

	HANDLE hdl = (HANDLE)_beginthreadex(NULL,0,threadFunc,NULL,0,NULL);

	for (int i = 0; i<5; ++i)
	{
		WaitForSingleObject(g_eventSon,INFINITE);
		for (int j =0; j<4; ++j)
		{
			cout <<"主线程输出"<<j<<endl;
		}
		SetEvent(g_eventMain);
	}
	CloseHandle(hdl);
	CloseHandle(g_eventMain);
	CloseHandle(g_eventSon);
		return 0;
}

 

抱歉!评论已关闭.