waitforsingleobject的作用_效率理论

waitforsingleobject的作用_效率理论MicrosoftWindows平台中两种最常用的锁定方法为WaitForSingleObject和EnterCriticalSection。WaitForSingleObject是一个过载MicrosoftAPI,可用于检查和修改许多不同对象(如事件、作业、互斥体、进程、信号、线程或计时器)的状态。WaitForSingleObject的一个不足之处是它会始终获取内核的锁

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Microsoft Windows 平台中两种最常用的锁定方法为 WaitForSingleObject EnterCriticalSectionWaitForSingleObject 是一个过载 Microsoft API ,可用于检查和修改许多不同对象(如事件、作业、互斥体、进程、信号、线程或计时器)的状态。Wa itForSingleObject 的一个不足之处是它会始终获取内核的锁定,因此无论是否获得锁定,它都会进入特权模式 ( 环路 0) 。此 API 还进入 Windows 内核,即使指定的超时为 0 ,亦如此。此锁定方法的另一不足之处在于,它一次只能处理 64 个尝试对某个对象进行锁定的线程。WaitForSingleObject 的优点是它可以全局进行处理,这使得此 API 能够用于进程间的同步。它还具有为操作系统提供锁定对象信息的优势,从而可以实现公平性及优先级倒置。

通过对关键代码段实施 EnterCriticalSection LeaveCriticalSection API 调用,可以使用 EnterCriticalSection 。此 API 具有 WaitForSingleObject 所不具备的优点,因为只有存在锁定争用时,才会进入内核。如果不存在锁定争用,则此 API 会获取用户空间锁定,并且在未进入特权模式的情况下返回。如果存在争用,则此 API 在内核中所采用的路径将与 WaitForSingleObject 极其相似。 在低争用的情况下,由于 EnterCriticalSection 不进入内核,因此锁定开销非常低。

不足之处是 EnterCriticalSection 无法进行全局处理,因此无法为线程获取锁定的顺序提供任何保证。EnterCriticalSection 是一种阻塞调用,意味着只有线程获得对此关键区段的访问权限时,该调用才会返回。Windows 引入了 TryEnterCriticalSection TryEnterCriticalSection 是一种非阻塞调用,无论获得锁定与否都会立即返回。此外,EnterCriticalSection 还允许开发人员使用自旋计数对关键区段进行初始化,在回退前线程会按此自旋计数尝试获取锁定。通过使用 API InitializeCriticalSectionAndSpinCount ,完成初始化。自旋计数可以在此调用中进行设置,也可以在注册表中进行设置,以根据不同操作系统及其相应的线程量程对自旋进行更改。

如果存在锁定争用,则 EnterCriticalSection WaitForSingleObject 都会进入内核。如果实现程度过高,从用户模式到特权模式的转换开销将会非常大。

EnterCriticalSection
WaitForSingleObject API 调用在对使用数千个周期的运算进行锁定时,通常不会影响性能。在这些情况下,锁定调用本身的开销不会如此突出。会导致性能降低的情况是粒度锁定,获得和释放此锁定要花费数百个周期。在这些情况下,使用用户级别锁定则非常有益。

为了说明在低争用的情况下 WaitForSingleObject 调用与 EnterCriticalSection 调用的开销情况,我们分别在 1 个和 2 个线程上运行了内存管理锁定内核 。在低争用的情况下,存在加速比 (WaitForSingleObject_Time / EnterCriticalSection_Time) 大约为 5 倍的性能之差。在 2 个线程持续争用的情况下,使用 EnterCriticalSection 和使用 WaitForSingleObject 之间的差别最小。在低争用的情况下存在性能差距的原因如下:WaitForSingleObject 在每次调用时都进入内核,而 EnterCriticalSection 只有当存在锁定争用时,才进入内核。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/191619.html原文链接:https://javaforall.net

(0)
上一篇 2026年1月28日 下午6:15
下一篇 2026年1月28日 下午6:43


相关推荐

  • 《善数者成:大数据改变中国》读书笔记3

    《善数者成:大数据改变中国》读书笔记3第八章撬动商业:新“规模经济”,数最懂你每一个消费者在消费的过程中留下数据,就会形成商业大数据。“”智慧门店”与天猫围绕新零售在新品首发、渠道管理、大数据赋能和线上线下全渠道融合等领域展开一揽子合作。向新零售转变,卖货层面是最直接的,其次是数据要打通。海澜之家采用RFID技术给2亿件衣服分配了各自的身份编码,进而实现了线上下单、线下发货,并在门店之间实现了数据共享互通,让一条条销售数据从“碎片”走向“整合”,然后又通过大数据分析,更好地分析和洞察消费者需求,及时调整经营策略,降低整体经营性投入,最终

    2022年8月30日
    12
  • PhantomJS简介[通俗易懂]

    PhantomJS简介[通俗易懂]PhantomJS是一个可编程的无头浏览器.无头浏览器:一个完整的浏览器内核,包括js解析引擎,渲染引擎,请求处理等,但是不包括显示和用户交互页面的浏览器。可以使用Phantomejs做一些页面渲染的工作;如获取js的页面内容、截图等;

    2022年7月26日
    11
  • 有哪些顶级水平的中国程序员?[通俗易懂]

    有哪些顶级水平的中国程序员?[通俗易懂]本文转载自启舰杂谈我们熟知的很多程序员都是国外的。那我们中国有没有顶尖级的程序员,出于好奇,我全网进行了搜罗,这里把我认为比较厉害的一些程序员展示给大家。篇幅有限,很多程序员我也没听过,所以就没有展示。排名顺序也没什么特别的,先看上谁,谁就排第一。比如,第一的尤雨溪单纯就是因为他长的帅如果你认为还有哪位大咖是你心目中的神,可以列出来,如果列的人多的话,我再搞一期给大家介绍介绍。一、尤雨溪江湖流传一个小故事:一款名叫Clear的软件,在…

    2022年10月11日
    5
  • Claude 3.7:最强AI编码助手,附国内ClaudeAPI KEY密钥获取教程

    Claude 3.7:最强AI编码助手,附国内ClaudeAPI KEY密钥获取教程

    2026年3月15日
    2
  • 自定义Python排序函数比较方式

    自定义Python排序函数比较方式当你想按自己的方式对数组元素进行排序时,我们需要自定义比较函数实现我们想实现的排序方式。例1以降序对数组进行排序>>>defcomp(x,y):…returny-x…>>>a=[1,8,4,5,2,7]>>>a.sort(comp)>>>a[8,7,5,4,2,1…

    2025年6月25日
    6
  • 文心一言怎么创建智能体

    文心一言怎么创建智能体

    2026年3月12日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号