// Critsetion.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include <Windows.h>
#include <iostream>
#include <process.h>
using namespace std;CRITICAL_SECTION g_cs;
char name[]="zhangdongsheng";unsigned __stdcall ThreadPoc1( void* pArguments)
{while (1){EnterCriticalSection(&g_cs); //如果此处不对全局变量name进行加锁//那么输出结果将有可能出现不一致现象memset(name,0,sizeof(name));strcpy(name,"Thread1");Sleep(600);cout<<"Thread1 "<<name<<endl;LeaveCriticalSection(&g_cs);}return 0;
}
unsigned __stdcall ThreadPoc2( void* pArguments)
{while(1){EnterCriticalSection(&g_cs);memset(name,0,sizeof(name));strcpy(name,"Thread2");Sleep(500);cout<<"Thread2 "<<name<<endl;LeaveCriticalSection(&g_cs);}return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{InitializeCriticalSection(&g_cs);HANDLE hThread1=(HANDLE)_beginthreadex(NULL,0,ThreadPoc1,NULL,0,NULL);HANDLE hThread2=(HANDLE)_beginthreadex(NULL,0,ThreadPoc2,NULL,0,NULL);CloseHandle(hThread1);CloseHandle(hThread2);while(1){Sleep(500);}DeleteCriticalSection(&g_cs);return 0;
}

不加锁会出现不一致的情况

加锁后:

转载于:https://www.cnblogs.com/zhangdongsheng/archive/2012/03/27/2419923.html

CRITICAL_SECTION 学习相关推荐

  1. CRITICAL_SECTION的详细说明

    日前主子我在复习线程同步的时候看到临界区这段,平时使用临界区的时候,大家都习以为常的   EnterCriticalSection  LeaveCriticalSection,但是其实临界区还有许多其 ...

  2. 用户方式中线程的同步——Windows核心编程学习手札之八

    用户方式中线程的同步 --Windows核心编程学习手札之八 系统中所有线程都必须拥有对各种系统资源的访问权,这些资源包括内存堆栈.串口.文件.窗口和许多其他资源.如果一个线程需要独占对资源的访问权, ...

  3. Win32 多线程学习总结

    Win32多线程编程学习心得 http://blog.csdn.net/jonathan321/article/details/50782832 博客原文地址:http://jerkwisdom.gi ...

  4. C++ 线程同步之临界区CRITICAL_SECTION

    一.临界区临界区又称关键代码段,指的是一小段代码在代码执行前,他需要独占一些资源.程序中通常将多线程同时访问的某个资源作为临界区,需要定义一个CRITICAL_SECTION类型的变量,然后调用Ini ...

  5. 深入理解CRITICAL_SECTION

    摘要 临界区是一种防止多个线程同时执行一个特定代码节的机制,这一主题并没有引起太多关注,因而人们未能对其深刻理解.在需要跟踪代码中的多线程处理的性能时,对 Windows 中临界区的深刻理解非常有用. ...

  6. mfc基础教程(学习笔记)

    目录 mfc基础教程 第一章:CDC的使用 第二章:文本编程 第三章:菜单 第四章:对话框 第五章:对话框(二) 第六章:样式 第七章:创建兼容DC 第八章:图形的保存与重绘 第九章:文件 第十章:文 ...

  7. webrtc学习--webrtc桌面采集

    文章目录 前言 准备 webrtc采集 下面通过api简单的说明下webrtc采集部分: 屏幕采集 窗口采集 webrtc采集数据回调类 webrtc采集代码 webrtc 代码 webrtc代码说明 ...

  8. windows程序设计(第5版 珍藏版)学习笔记

    第1章 起步 windows简单程序示例及说明 #include <windows.h>//包含其他windows头文件int WINAPI WinMain (HINSTANCE hIns ...

  9. java入门 慕路径,Java入门基础知识总结学习教程大全【必看经典】

    类型的表达式,是循环条件,表达式3是党执行了一遍循环之后,修改控制循环的变量值. ??? for语句的执行过程是这样的:首先计算表达式1,完成必要的初始化工作:然后判断表达式2的值,如果表达式的值为t ...

最新文章

  1. git分支指的是_你一定知道的Git分支模型
  2. ASP.NET Core的Kestrel服务器
  3. 八个最好的开源机器学习框架和库
  4. 【MySQL】navicat for mysql 10.1.7注册码
  5. crash recovery mysql_InnoDB crash recovery 完整过程
  6. 给程序猿简历的一些建议
  7. cocos2dx中加入unzip
  8. 并发-阻塞队列源码分析
  9. 小学生也能看懂的ArrayList底层原理
  10. OSChina 周五乱弹 —— 你用学习机来搞学习?
  11. 阶段1 语言基础+高级_1-3-Java语言高级_03-常用API第二部分_第2节 Date类_3_DateFormat类SimpleDateFormat类...
  12. Dynamics CRM2013 6.1.1.1143版本插件注册器的一个bug
  13. C++打印ASCLL码表
  14. Android8.0一键root,小米Mix 2(安卓8.0)一键ROOT详解教程,看教程ROOT
  15. 心理测试软件需求分析报告,大学生心理测试软件心理测评档案管理系统
  16. 合成游戏中的数学原理
  17. 模拟手机端来爬取数据
  18. Android调用系统应用打开各种类型文件
  19. Linux内核的组成
  20. Google Guice使用入门(转)

热门文章

  1. LeetCode 2069. 模拟行走机器人 II(模拟)
  2. LeetCode 2017. 网格游戏(前缀和)
  3. LeetCode 1498. 满足条件的子序列数目(排序+二分查找+快速幂)
  4. LeetCode 57. 插入区间(一次遍历)
  5. 基于sklearn的LogisticRegression鸢尾花多类分类实践
  6. LeetCode 522. 最长特殊序列 II
  7. android代理生命周期,了解 Activity 生命周期
  8. python比较时间的最大值_时间戳的最大值
  9. python清洗文本数据_02.数据预处理之清洗文本信息
  10. mysql分页插件springboot_SpringBoot--使用Mybatis分页插件