线程锁的限制CRITICAL_SECTION临界区线程锁用户态对象仅本进程内部线程同步不能跨进程遇到跨进程共享资源共享内存、文件、内核页临界区就无能为力需要互斥体 Mutex内核对象互斥体核心概念本质存放在内核中的令牌属于内核对象可以跨进程同步工作逻辑● 线程拿到互斥体获取令牌进入临界区互斥体变为无信号● 其它线程调用WaitForSingleObject获取直接阻塞● 持有线程调用ReleaseMutex()释放互斥体变回有信号等待线程被唤醒内核对象用完必须CloseHandle()关闭句柄CreateMutex 函数原型HANDLECreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes,//安全属性NULL句柄不可继承BOOL bInitialOwner,//创建者是否直接占有互斥体LPCSTR lpName//互斥体名字NULL为匿名有名字就可以跨进程打开);参数详解lpMutexAttributes一般填NULLbInitialOwner○ TRUE创建出来互斥体是无信号状态当前线程直接占有互斥体○ FALSE创建出来互斥体是有信号状态任意线程都可以立刻获取lpName互斥体名称命名互斥体可被别的进程通过名字打开传NULL代表匿名只能本进程内使用✨互斥体递归特性同一个线程已经拥有互斥体可以再次WaitForSingleObject获取不会死锁获取多少次就要对应ReleaseMutex多少次释放互斥体BOOLReleaseMutex(HANDLE hMutex);只有当前拥有互斥体所有权的线程才可以调用 ReleaseMutex 释放互斥体 vs CRITICAL_SECTION临界区高频对比对比项CRITICAL_SECTION 临界区Mutex 互斥体 (CreateMutex)对象类型用户态对象非内核对象内核对象使用范围仅同一个进程内部线程进程内、跨进程都可以等待超时不能设置超时拿不到锁永久阻塞借助 WaitForSingleObject 可以设置超时时间效率速度快尽量不进入内核速度慢一定会切换内核态线程异常退出线程崩溃不会自动释放锁其它线程永久卡死持有线程异常终止系统自动回收互斥体不会永久死等关闭销毁DeleteCriticalSection()CloseHandle()互斥体经典用法程序防多开原理创建命名互斥体● 如果系统里同名互斥体已经存在CreateMutex依旧返回有效句柄GetLastError()返回ERROR_ALREADY_EXISTS(183)说明程序已经跑了一份直接退出● 如果不存在则新建互斥体正常运行程序HANDLE hMutexCreateMutex(NULL,FALSE,LMyApp_Mutex);DWORD dwErrGetLastError();if(hMutex!NULL){if(dwErrERROR_ALREADY_EXISTS){//已有实例退出CloseHandle(hMutex);return0;}}else{//创建失败return0;}//主程序逻辑...//程序退出CloseHandle(hMutex);注意防多开只是互斥体的附加玩法互斥体本职工作是线程 / 进程同步其它防多开手段文件锁、共享内存、窗口查找场景选型只做进程内部多线程同步优先 CRITICAL_SECTION 临界区性能更高跨进程同步必须使用 Mutex 互斥体总结临界区用户态不能跨进程互斥体是内核对象支持跨进程bInitialOwnerFALSE互斥体初始有信号TRUE创建线程直接占有互斥体初始无信号互斥体可以递归获取持有线程崩溃系统自动释放互斥体互斥体可以搭配WaitForSingleObject设置等待超时临界区 EnterCriticalSection 没有超时命名互斥体可以实现软件防多开判断GetLastError()ERROR_ALREADY_EXISTS互斥体内核对象结束必须CloseHandle临界区调用DeleteCriticalSection销毁
企业数字化 ERP 产品动态
相关推荐
增材制造如何革新模具材料与冷却设计 1. 模具制造的材料困境与历史局限在传统模具制造领域,工程师们长期陷入一种"材料迷信"——追求一种理论上完美的"万能钢"。这种材料需要同时具备高硬度、高韧性、耐磨性、耐热性,最好还能保持低廉的价格。但从业二十余年的经验告诉我… · 2026/9/23 9:54:03
别再背表了!图解原理带你用Python搞定latex符号实战 别再背表了!图解原理带你用Python搞定latex符号实战 是不是经常遇到这种情况:论文里插个公式,结果编译报错;或者想在前端展示数学题,发现Markdown渲染出来的符号全是乱码。很多教程只给你甩一张巨大的LaTeX符号表,让你去死记硬… · 2026/9/23 9:54:03
美联储加息周期下的股市投资策略与板块轮动分析 1. 加息周期下的股市生存指南最近收到不少新手投资者的私信,都在问同一个问题:"美联储又加息了,我的股票该怎么办?"作为经历过三轮完整加息周期的老股民,今天想和大家系统聊聊这个看似简单实则暗藏玄机的话题… · 2026/9/23 9:53:57
回家创业3个实战项目:别再背八股,用代码敲出底气 回家创业3个实战项目:别再背八股,用代码敲出底气 看了一堆教程还是不会写项目?这种挫败感我太懂了。你啃完《Python编程:从入门到实践》,觉得自己懂了;刷完LeetCode,觉得自己行了。但真让你从零搭一个 实战项目 ,脑子瞬间空白。… · 2026/9/23 10:41:29
企业级AI平台WorkBuddy Enterprise:Agent生态与开发实战指南 1. 企业级AI平台到底在解决什么问题1.1 从单点工具到平台化协作的必然转变过去两年,我接触过不少团队在AI落地上的尝试,绝大多数都卡在同一个地方:每个人各自用着不同的AI工具,写代码的用CodeBuddy,写文档的用另一个&a… · 2026/9/23 10:41:29
《The Forest》v1.12开发者模式实战指南:启动参数+指令链精准配置 1. 项目概述:这不是普通游戏攻略,而是一份可直接落地的开发者模式实战手册《The Forest》v1.12版本上线后,大量玩家在社区反馈“生存太硬核”“建造效率低”“调试道具耗时长”,尤其在多人联机场景下,新手常因资源卡点… · 2026/9/23 10:41:29
SSM停车计费系统毕设源码:六张表与计费算法全解析 简介:基于Java与SSM框架的校内车辆停车计费收费系统毕业设计源码包,涵盖前端展示、后端业务与数据库设计,面向计算机相关专业学生、课程设计者及需要快速搭建毕设项目的开发者,能帮助掌握SSM框架整合、搭建分层项目结构并理解停车… · 2026/9/23 10:41:29
深度学习OCR实战:deep_ocr环境搭建、参数调优与部署 简介:这是一份面向OCR学习者的深度学习项目代码包,内容围绕卷积神经网络与循环神经网络展开,覆盖图像预处理、文字检测、字符分割与识别等完整流程,适合想快速上手文字识别开发、了解OCR模型训练的读者。压缩包共51个文件… · 2026/9/23 10:41:29
大模型技术趋势与2026年核心岗位解析 1. 大模型技术发展现状与2026年预测当前大模型技术已经进入快速迭代期,GPT-4、Claude等主流模型的参数量已突破万亿级别。从技术演进路径来看,2023-2024年主要突破集中在多模态融合和推理效率提升,而2025-2026年将迎来以下几个关键转折点&… · 2026/9/23 10:41:21
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29