您的位置:首页 > 其它

临界区_打印字符串_2线程

2017-07-07 03:43 176 查看
#include <windows.h>							//包含头文件
#include <stdio.h>
DWORD WINAPI myfun1(LPVOID lpParameter );//声明线程函数
DWORD WINAPI myfun2(LPVOID lpParameter );
static int a1=0;								//定义全局变量并初始化
CRITICAL_SECTION Section;						//定义临界区对象
int main()										//主函数
{
InitializeCriticalSection(&Section); 			//初始化临界区对象
HANDLE h1,h2;									//定义线程句柄
h1=::CreateThread(NULL,0,myfun1,NULL,0,NULL);	//创建线程1
printf("线程1开始运行!\r\n");
h2=::CreateThread(NULL,0,myfun2,NULL,0,NULL);	//创建线程2
printf("线程2开始运行!\r\n");
::CloseHandle(h1);								//关闭线程句柄对象
::CloseHandle(h2);
::Sleep(10000);									//程序睡眠10秒
printf("正常退出程序请按\r\n");
while(1)
{
if(getchar()=='q')								//如果用户输入字符q
{
DeleteCriticalSection(&Section);			//删除临界区对象
return 0;
}
}
}

DWORD WINAPI myfun1(LPVOID lpParameter) 		//线程函数1
{
while(1)
{
EnterCriticalSection(&Section);			//进入临界区
a1++;										//变量自加
if(a1<10000)								//设置变量a1小于10000
{
//::Sleep(1000);								//程序睡眠1秒
printf("线程1正在计数%d\r\n",a1);
LeaveCriticalSection(&Section);				//离开临界区
}
else										//如果变量大于10000
{
LeaveCriticalSection(&Section);			//离开临界区
break;									//跳出循环
}
Sleep(2000);
}
return 0;
}
DWORD WINAPI myfun2(LPVOID lpParameter) 		//线程函数2
{
while(1)
{
EnterCriticalSection(&Section);		//进入临界区
a1++;
if(a1<10000)
{
//::Sleep(1000);							//程序睡眠1秒
printf("线程2正在计数%d\r\n",a1);
LeaveCriticalSection(&Section);				//离开临界区
}
else
{
LeaveCriticalSection(&Section);
break;
}
Sleep(2000);
}
return 0;									//线程函数返回0
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: