#include <iostream>
#include <windows.h>
using namespace std; CRITICAL_SECTION cs; // LockCount 它被初始化为数值 -1,此数值等于或大于 0 时,表示此临界区被占用;等待获得临界区的线程数:LockCount - (RecursionCount -1)
// RecursionCount 此字段包含所有者线程已经获得该临界区的次数
// OwningThread 此字段包含当前占用此临界区的线程的线程标识符,此线程 ID 与GetCurrentThreadId 所返回的 ID 相同 DWORD WINAPI ThreadProc1(LPVOID lpParameter)
{
for (int x = ; x < ; x++)
{
EnterCriticalSection(&cs);
Sleep();
printf("11111:%x %x %x\n", cs.LockCount, cs.RecursionCount, cs.OwningThread);
LeaveCriticalSection(&cs);
}
return ;
} DWORD WINAPI ThreadProc2(LPVOID lpParameter)
{
for (int x = ; x < ; x++)
{
EnterCriticalSection(&cs);
Sleep();
printf("22222:%x %x %x\n", cs.LockCount, cs.RecursionCount, cs.OwningThread);
LeaveCriticalSection(&cs);
}
return ;
} DWORD WINAPI ThreadProc3(LPVOID lpParameter)
{
for (int x = ; x < ; x++)
{
EnterCriticalSection(&cs);
Sleep();
printf("33333:%x %x %x\n", cs.LockCount, cs.RecursionCount, cs.OwningThread);
LeaveCriticalSection(&cs);
}
return ;
} DWORD WINAPI ThreadProc4(LPVOID lpParameter)
{
for (int x = ; x < ; x++)
{
EnterCriticalSection(&cs);
Sleep();
printf("44444:%x %x %x\n", cs.LockCount, cs.RecursionCount, cs.OwningThread);
LeaveCriticalSection(&cs);
}
return ;
} int main()
{
// 初始化临界区
InitializeCriticalSection(&cs);
// printf("%x %x %x", cs.LockCount, cs.RecursionCount, cs.OwningThread);
// 创建一个新的线程
HANDLE hTread1 = CreateThread(, , ThreadProc1, , , );
// 创建一个新的线程
HANDLE hTread2 = CreateThread(, , ThreadProc2, , , );
// 创建一个新的线程
HANDLE hTread3 = CreateThread(, , ThreadProc3, , , );
// 创建一个新的线程
HANDLE hTread4 = CreateThread(, , ThreadProc4, , , );
// 如果不在其它的地方引用它就关闭句柄
::CloseHandle(hTread1);
::CloseHandle(hTread2);
::CloseHandle(hTread3);
::CloseHandle(hTread4);
// 销毁临界区
// DeleteCriticalSection(&cs);
getchar();
return ;
}

最新文章

  1. js生成验证码并验证
  2. Navicat链接Oracle提示ORA-12737
  3. [转]Java静态方法为什么不能访问非静态方法
  4. BM25相关度打分公式
  5. mongrel
  6. F# 天生就是就异步和并行的料
  7. CentOS_6.5_x64:VNC安装配置
  8. WebSite---前台系统图片验证码心得
  9. Python—课时ONE
  10. springboot源码分析-SpringApplication
  11. vue+vuecli+webapck2实现多页面应用
  12. drawable自定义字体颜色
  13. 解决python解析文件时输出乱码
  14. mybatis13--2级缓存
  15. C - Cake HDU - 1722 (数学)
  16. windows下安装GIT,使用GIT GUI 上传文件到github
  17. 自学Java第一周的总结
  18. BigDecimal 类型数据比较大小
  19. Swift3 根据秒数获取视频时长(转换成00:00:00时间格式)以及将时长转换成秒
  20. java性能监控工具jstat

热门文章

  1. mysql事务回滚机制概述
  2. EasyNVR网页Chrome无插件播放安防摄像机视频流是怎么做到web浏览器延时一秒内
  3. 查看appPackage和appActivity的多种方法
  4. mysql使用yum源安装各个版本的mysql数据库
  5. Centos7.3使用脚本自动静默安装oracle11.2.0.4数据库
  6. python爬虫4猫眼电影的Top100
  7. pymysql DAO简单封装
  8. Javaspring+mybit+maven中实现定时任务
  9. SpringBoot常用注解(三)
  10. windows下大数据开发环境搭建(2)——Hadoop环境搭建