windows C/C++ 线程安全(一)临界区

VC++ 线程同步之临界区(CriticalSection) 阅读详情

承接上面一篇讲了线程创建部分:https://blog.youkuaiyun.com/uVarAndMethod/article/details/90358925

临界区的使用

	1、创建CRITICAL_SECTION:									
	CRITICAL_SECTION cs;					
						
	2、在使用前进行初始化					
	InitializeCriticalSection(&cs);					
						
	3、在函数中使用:					
	DWORD WINAPI 线程A(PVOID pvParam) 					
	{					
	      EnterCriticalSection(&cs);									
	      //对全局遍历X的操作								
	      LeaveCriticalSection(&cs);					
	   return(0);					
	}					
						
	DWORD WINAPI 线程B(PVOID pvParam) 					
	{					
	      EnterCriticalSection(&g_cs);					
	      //对全局遍历X的操作							
	      LeaveCriticalSection(&g_cs);					
	   return(0);					
	}					
						
	4、删除CRITICAL_SECTION									
	VOID DeleteCriticalSection(PCRITICAL_SECTION pcs);									
	当线程不再试图访问共享资源时					

    	typedef struct _RTL_CRITICAL_SECTION {		
	    PRTL_CRITICAL_SECTION_DEBUG DebugInfo;		
	    LONG LockCount;		
	    LONG RecursionCount;		
	    HANDLE OwningThread;       		
	    HANDLE LockSemaphore;		
	    DWORD SpinCount;		
	} RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;		
			
	LockCount:		
	它被初始化为数值 -1		
	此数值等于或大于 0 时,表示此临界区被占用		
			
	等待获得临界区的线程数:LockCount - (RecursionCount -1)		
			
	RecursionCount:		
	此字段包含所有者线程已经获得该临界区的次数		
			
	OwningThread:		
	此字段包含当前占用此临界区的线程的线程标识符		
	此线程 ID 与GetCurrentThreadId 所返回的 ID 相同		

 

 

windows下线程C/C++运行库 window下C/C++运行库 以下内容引述至《windows核心编程》 C/C++运行库 库名称 描述 LibCMt.lib 库的静态链接发行版本 LibCMtD.lib 库的静态链接调试版本 MSVCRt.lib 导入库,用于动态链接MSVCR80.dll库的发行版本(默认) MSVCRtD.lib 导入库,用于动态链接MSVCR80D.dll库的调试版本 MS... 阅读详情

相关推荐

具身智能落地实战:制造业、物流与电力的工业级方案设计

具身智能是一种融合感知、推理与物理执行的智能范式,其核心在于构建具备因果建模能力、多模态闭环反馈和实时动作规划的行动主体。区别于通用AI或传统自动化,它依托多模态大模型、高精度力觉/触觉传感及Sim2Real仿真技术,实现对真实物理环境的深度理解与自适应交互。技术价值体现在可解释性决策、毫秒级跨模态协同与零停机容错能力,已规模化应用于制造业质检、物流破损鉴定、电力绝缘子巡检等强约束工业场景。本文聚焦‘行业应用方案解决方案’这一高频搜索需求,系统拆解从工位筛选、分层架构设计到72小时现场交付的全链路工程方法论

weixin_30952479的博客 300

C++11多线程:windows临界区和Linux互斥锁、递归锁的区别与使用。

多线程windows临界区和Linux互斥锁提示:以下是本篇文章正文内容,下面案例可供参考(1)了解windows临界区;(2)了解linux递归锁和互斥锁;(3)了解基本函数的使用。

weixin_55491446的博客 1318

虚幻UE 增强输入-触发器

输入触发器(UInputTrigger): 使用经过修饰器修改的输入值,或者使用其他输入动作的输出值,来确定是否激活输入动作。

UE成长之路,欢迎大家的关注! 5464

windows C/C++ 线程安全(三)(互斥+同步)

承接上一篇:https://blog.youkuaiyun.com/uVarAndMethod/article/details/90364461 互斥: 当多个线程访问同一个全局变量,或者同一个资源(比如打印机)的时候,需要进行线程间的互斥操作 来保证访问的安全性. 临界区、互斥体、事件和...

网瘾少年丶的博客 670

图形学常见概念小结

前言:本文记录《unity shader入门精要》和openGL相关学习过程中一些学习要点; 文章目录PBR流程渲染管线细分着色器的底层实现,应用原理常见的色调映射算法openGl和Direct X的区别PBR流程和URP渲染管线Camera loop(剔除)MVP矩阵变换光线追踪前向渲染和延迟渲染shader和材质的区别bloom原理后处理的理解高斯模糊实现原理图像处理中的边缘检测算子 PBR流程 小结:一套基于自然界微平面理论、能量守恒、菲涅尔反射、线性空间等的科学理论所实现的基于物理的渲染系统,包含一

小谁的博客 1163

Android Qcom Display学习(十一)

该系列文章总目录链接与各部分简介:本章主要是基于MIPI Payload传输接口的学习,包括Generic和DCS的接口不同。底层都是基于去封装的,下面第一部分调用原生接口,第二部分分析高通是如何进行读写操作的。

Android驱动开发 3182

临界区和C++使用方式

一.临界资源 临界资源是一次仅允许一个进程使用的共享资源。各进程采取互斥的方式,实现共享的资源称作临界资源。属于临界资源的硬件有,打印机,磁带机等;软件有消息队列,变量,数组,缓冲区等。诸进程间采取互斥方式,实现对这种资源的共享。 二.临界区: 每个进程中访问临界资源的那段代码称为临界区(criticalsection),每次只允许一个进程进入临界区,进入后,...

开发笔记 3086

《Python Web项目集锦》-专栏介绍和目录

本专栏专注于Python Web项目,涉及内容包含FastAPI、Django、Flask等,所有项目代码完整且可直接运行。不管是零基础还是有经验的开发,相信都能从本专栏获益。有任何问题欢迎私聊博主,专栏持续更新中...

数据知道的博客 5214

C++临界区

原文链接:http://blog.youkuaiyun.com/olansefengye1/article/details/53262917 一、Win32平台 1、相关头文件和接口 #include <windows.h> CRITICAL_SECTION cs;//定义临界区对象 InitializeCriticalSection(&cs);//初始化临界区 EnterCri...

蜜汁程序员的博客 3348

【自动驾驶轨迹规划之hybrid A*算法】

本文参考论文:https://ai.stanford.edu/~ddolgov/papers/dolgov_gpp_stair08.pdf 这篇文章是基于经典A*算法与reeds-shepp曲线的,不清楚的读者请参考【自动驾驶轨迹规划5之A*算法】_无意2121的博客-优快云博客【自动驾驶轨迹规划之dubins曲线与reeds-shepp曲线】_无意2121的博客-优快云博客 目录 1 hybrid A* 算法创新点 1.1 搜索方式 1.2 车辆运动学模型 1.3 reeds-shepp曲

weixin_65089713的博客 1万+

[HBM] RAM Cell Self Repair | 内存单元自我修复

对抗错误的大都是冗余,内存颗粒在设计的时候也考虑增加冗余。具体的说:添加冗余或备用的存储单元行和列,及时将测试中的故障进行修复和替换,存储器修复包括行修复,列修复或两者的组合。

串起点滴 785

《C/C++ 面试 100 例》(十五)临界区

面试官:临界区是用来干什么的?

英雄哪里出来 14万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C++多线程实例之临界区同步

临界区的特点:非内核对象,只能在window下使用,linux下不能使用;只能在同一进程内的线程间使用,速度快。 互斥量特点:互斥量是内核对象,可以用于进程内也可以在进程间互斥,速度相对互斥量慢点,也可以解决某进程意外终止所造成的“遗弃”问题。 临界区和互斥量都是只能互斥,不能同步,因为它们都有“线程所有权”,一旦拥有可以进行多次锁定。可以通过内核对象(linux下是条件变量)设置无信号阻

自由理想的足迹 3603

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

windows C++ 进入临界区 退出临界区

#include "windows.h" CRITICAL_SECTION  _critical /*初始化,最先调用的函数。没什么好说的,一般windows编程都有类似初始化的方法*/ InitializeCriticalSection(& _critical)  /*释放资源,确定不使用_critical时调用,一般在程序退出的时候调用。如果以后

月光轩辕的专栏 5308

c语言中进入临界区函数,VC/MFC 临界区使用方法事例

临界区的作用:避免临界区内的数据(一般为共享的资源)被不同的线程同时访问,实现线程的同步操作。保证只能由先进入临界区的一个线程访问结束后,其他线程才可以继续访问共享的资源。以下为临界区的使用方法:*.h头文件:#include CRITICAL_SECTIONm_cs_test;///< 定义一个临界区对象*.cpp源文件使用方法:在类的构造函数内初始化临界区对象//该函数必须在任何线程调...

weixin_35997246的博客 1041

17.11 C++并发与多线程-Windows临界区与其他各种mutex互斥量

Windows临界区与其他各种mutex互斥量,recursive_mutex,这叫作“递归的独占互斥量”。my_mutex.try_lock_until

migu123的专栏 1925

windows C/C++ 线程安全(二)跨进程的线程控制之于互斥体

承接上一篇:https://blog.youkuaiyun.com/uVarAndMethod/article/details/90359480 DWORD WaitForSingleObject( HANDLE hHandle, // handle to object DWORD dwMilliseconds // time-out interval ...

网瘾少年丶的博客 702

[C/C++]Windows多线程入门实例讲解

介绍windows系统下,利用C/C++多线程的编写。 1 创建线程 HANDLE CreateThread( //windows创建线程的API函数 LPSECURITY_ATTRIBUTES lpThreadAttributes,//SD:线程安全相关的属性,常置为NULL SIZE_T dwStackSize,//initialstacksize:新线程的初始化栈的大小,可设置为0 LPTHREAD_START_ROUTINE lpStartAddress,//threadfunction:被线程

qq_41221520的博客 880

Windows平台实战:用promise-cpp和MFC打造异步计时器应用

在Windows开发中,异步编程是提升用户体验的关键技术。本文将介绍如何使用promise-cpp库结合MFC框架,快速实现一个高效的异步计时器应用,让你的程序在执行定时任务时保持界面流畅响应。 ## 为什么选择promise-cpp? promise-cpp是一个C++ promise/A+库,采用Javascript风格设计,让C++开发者也能轻松享受异步编程的便利。它提供了直观的链式调用

gitblog_00213的博客 611

cpp_redis跨平台部署指南:在Windows、Linux和macOS上的配置与优化

cpp_redis是一个基于C++11的轻量级Redis客户端库,提供异步、线程安全、无依赖、支持流水线和跨平台的Redis连接能力。作为现代C++开发的理想选择,cpp_redis让开发者能够在Windows、Linux和macOS三大主流平台上轻松集成Redis功能,无需担心平台差异带来的兼容性问题。🎯 ## 为什么选择cpp_redis进行跨平台开发? cpp_redis作为一款优秀的

gitblog_00735的博客 903

Windows下不建议使用C/C++运行库的本地化功能

Windows不建议setlocale或使用C++的std::locale对象等C/C++运行库的本地化功能,因为setlocale或C++的std::locale对象实现bug多,不稳定,可能存在兼容性问题

defrag257的博客 640

C/C++ windows系统下禁用按键/快捷键/鼠标

C/C++ windows系统下禁用按键/快捷键/鼠标

m0_74389553的博客 2049

(C/C++)Windows编程

Windows编程的核心都在这里,带给你不同的体验

MOON_YZM的博客 3318

C/C++运行库简介

什么是C/C++运行库 任何一个C 程序,它的背后都有一套庞大的代码来进行支撑,以使得该程序能够正常运行。这套代码至少包括入口函数,及其所依赖的函数所构成的函数集合。另外包括各种标准库函数的实现。 这样的一个代码集合称之为运行时库(Runtime Library),C 语言的运行时库,称为 C 运行库(CRT)。 C 运行库大致包含的功能: 1. 启动与退出函数 2. 由C 语言标准规定的C 语言标准库所拥有的函数实现。 3. I/O 功能的封装与实现。 4. 堆的封装和实现 5. 语言中一些特殊功能的实现

weixin_45239587的博客 1万+

windows核心编程之 C/C++运行库注意事项

文章目录1. 用`_beginthreadex`而不要用`CreateThread`创建线程2. 绝对不应该调用的C/C++运行库函数3. 了解自己的身份 标准C/C++运行库最初不是为多线程应用程序而设计。在多线程环境中会出现问题的C/C++运行库变量和函数有errno,_deserrno,strtok,_wcstok,strerror,_strerror,tmpnam,tmpfile,asctime,_wasctime,gmtime,_ecvt和_fcvt等。 创建新线程时,一定不要调用操作系统

超级大洋葱的博客 425
上一篇: windows C/C++ 线程创建
下一篇: windows C/C++ 线程安全(二)跨进程的线程控制之于互斥体
__网瘾少年
博客等级 码龄11年 122粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值