#include <stdio.h>
#include <windows.h>
#include <iostream.h>
#include <winbase.h>
#define THREAD_INSTANCE_NUMBER 3
//全局变量
int iCounter=0;
CRITICAL_SECTION criCounter;
DWORD SubThread(void * pD)
{
int iTemp=(int)pD;
cout << "SubThread" << iTemp << endl;
for(int i=0;i<8;i++)
{
EnterCriticalSection(&criCounter);
int iCopy=iCounter;
Sleep(100);
iCounter=iCopy+1;
printf("thread %d : %d\n",iTemp,iCounter);
LeaveCriticalSection(&criCounter);
}
return 0;
}
void main(void)
{
cout << "CreateThread" << endl;
// Create a thread;
DWORD IDThread[THREAD_INSTANCE_NUMBER];
HANDLE hThread[THREAD_INSTANCE_NUMBER];
int i;
//创建临界区
InitializeCriticalSection(&criCounter);
//创建线程
for (i=0;i<THREAD_INSTANCE_NUMBER;i++)
{
hThread[i] = CreateThread(NULL, // no security attributes
0, // use default stack size
(LPTHREAD_START_ROUTINE) SubThread, // thread function
(void *)i, // no thread function argument
0, // use default creation flags
&(IDThread[i])); // returns thread identifier
// Check the return value for success.
if (hThread[i] == NULL)
cout << "CreateThread error" << i << endl;
else
cout << "CreateThread: " << i << endl;
}
//等待线程结束
WaitForMultipleObjects(THREAD_INSTANCE_NUMBER,hThread,TRUE,INFINITE);
//删除临界区
DeleteCriticalSection(&criCounter);
printf("\nover\n");
Sleep(5000);
return ;
}
CriticalSection.rar_CCriticalSection_CriticalSection
版权申诉
196 浏览量
2022-09-23
06:45:10
上传
评论
收藏 32KB RAR 举报
小贝德罗
- 粉丝: 68
- 资源: 1万+
最新资源
- mybatis动态sql及其JAVA示例
- 微软常用运行库 游戏运行库 VC++各个版本
- 微信小程序开发教程.pptx
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- 锐捷网络认证中心网络管理.pdf
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- SD8233LF是一款用于单按键触摸及接近感应开关,其用途是替代传统的机械型开关芯片IC
- 基于YOLOv5的烟雾火焰检测算法研究
- 基于STM32的联合调试侦听设备解决方案原理图PCB源文件调试工具视频(大赛作品)
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈