首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么std::mutex比CRITICAL_SECTION慢两倍

问为什么std::mutex比CRITICAL_SECTION慢两倍
EN

Stack Overflow用户
提问于 2015-02-17 16:02:20
回答 1查看 3.3K关注 0票数 8

互斥锁是用关键部分实现的,这就是为什么它比OS (在Windows上)要快得多的原因。然而,它没有Windows CRITICAL_SECTION那么快。

在一个线程中,时间只是一个紧密的循环:

代码语言:javascript
复制
423.76ns ATL CMutex
 41.74ns std::mutex
 16.61ns win32 Critical Section

我的问题是std::mutex还在做什么?我看了消息来源,但无法追踪。然而,在提交给美国竞争情报委员会( Crit Sec )之前,还需要采取额外的措施。我的问题是:完成这些额外步骤有用吗?也就是说,额外的步骤是什么;使用CRITICAL_SECTION会遗漏什么?

另外,如果它不是用Mutex实现的,他们为什么叫它Mutex呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-17 19:02:25

一个std::mutex提供非递归的所有权语义。CRITICAL_SECTION提供递归语义。因此,我假设std::mutex实现中的额外层是(至少部分)来解决这一差异。

Update:通过遍历代码,看起来像std::mutex是根据队列和InterlockedX指令实现的,而不是传统的Win32 CRITICAL_SECTION。即使std::mutex是非递归的,RTL中的底层代码也可以选择性地处理递归锁,甚至是定时锁。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28565664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档