CRITICAL_SECTION 学习
// 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 学习相关推荐
- CRITICAL_SECTION的详细说明
日前主子我在复习线程同步的时候看到临界区这段,平时使用临界区的时候,大家都习以为常的 EnterCriticalSection LeaveCriticalSection,但是其实临界区还有许多其 ...
- 用户方式中线程的同步——Windows核心编程学习手札之八
用户方式中线程的同步 --Windows核心编程学习手札之八 系统中所有线程都必须拥有对各种系统资源的访问权,这些资源包括内存堆栈.串口.文件.窗口和许多其他资源.如果一个线程需要独占对资源的访问权, ...
- Win32 多线程学习总结
Win32多线程编程学习心得 http://blog.csdn.net/jonathan321/article/details/50782832 博客原文地址:http://jerkwisdom.gi ...
- C++ 线程同步之临界区CRITICAL_SECTION
一.临界区临界区又称关键代码段,指的是一小段代码在代码执行前,他需要独占一些资源.程序中通常将多线程同时访问的某个资源作为临界区,需要定义一个CRITICAL_SECTION类型的变量,然后调用Ini ...
- 深入理解CRITICAL_SECTION
摘要 临界区是一种防止多个线程同时执行一个特定代码节的机制,这一主题并没有引起太多关注,因而人们未能对其深刻理解.在需要跟踪代码中的多线程处理的性能时,对 Windows 中临界区的深刻理解非常有用. ...
- mfc基础教程(学习笔记)
目录 mfc基础教程 第一章:CDC的使用 第二章:文本编程 第三章:菜单 第四章:对话框 第五章:对话框(二) 第六章:样式 第七章:创建兼容DC 第八章:图形的保存与重绘 第九章:文件 第十章:文 ...
- webrtc学习--webrtc桌面采集
文章目录 前言 准备 webrtc采集 下面通过api简单的说明下webrtc采集部分: 屏幕采集 窗口采集 webrtc采集数据回调类 webrtc采集代码 webrtc 代码 webrtc代码说明 ...
- windows程序设计(第5版 珍藏版)学习笔记
第1章 起步 windows简单程序示例及说明 #include <windows.h>//包含其他windows头文件int WINAPI WinMain (HINSTANCE hIns ...
- java入门 慕路径,Java入门基础知识总结学习教程大全【必看经典】
类型的表达式,是循环条件,表达式3是党执行了一遍循环之后,修改控制循环的变量值. ??? for语句的执行过程是这样的:首先计算表达式1,完成必要的初始化工作:然后判断表达式2的值,如果表达式的值为t ...
最新文章
- git分支指的是_你一定知道的Git分支模型
- ASP.NET Core的Kestrel服务器
- 八个最好的开源机器学习框架和库
- 【MySQL】navicat for mysql 10.1.7注册码
- crash recovery mysql_InnoDB crash recovery 完整过程
- 给程序猿简历的一些建议
- cocos2dx中加入unzip
- 并发-阻塞队列源码分析
- 小学生也能看懂的ArrayList底层原理
- OSChina 周五乱弹 —— 你用学习机来搞学习?
- 阶段1 语言基础+高级_1-3-Java语言高级_03-常用API第二部分_第2节 Date类_3_DateFormat类SimpleDateFormat类...
- Dynamics CRM2013 6.1.1.1143版本插件注册器的一个bug
- C++打印ASCLL码表
- Android8.0一键root,小米Mix 2(安卓8.0)一键ROOT详解教程,看教程ROOT
- 心理测试软件需求分析报告,大学生心理测试软件心理测评档案管理系统
- 合成游戏中的数学原理
- 模拟手机端来爬取数据
- Android调用系统应用打开各种类型文件
- Linux内核的组成
- Google Guice使用入门(转)
热门文章
- LeetCode 2069. 模拟行走机器人 II(模拟)
- LeetCode 2017. 网格游戏(前缀和)
- LeetCode 1498. 满足条件的子序列数目(排序+二分查找+快速幂)
- LeetCode 57. 插入区间(一次遍历)
- 基于sklearn的LogisticRegression鸢尾花多类分类实践
- LeetCode 522. 最长特殊序列 II
- android代理生命周期,了解 Activity 生命周期
- python比较时间的最大值_时间戳的最大值
- python清洗文本数据_02.数据预处理之清洗文本信息
- mysql分页插件springboot_SpringBoot--使用Mybatis分页插件