c++ - C++中互斥锁和临界区之间的性能差异

标签 c++ performance mfc locking

我正在阅读 this post关于给定测试用例的关键部分和互斥锁之间的 C# 性能差异。我想知道是否有任何进一步的文档为 C++ 应用程序的各种锁定类提供性能开销,特别是在 Windows 32 或 64 位平台上运行的 MFC?

我问的原因是我在广泛的自动化测试中获得的分析器结果显示在互斥代码上花费了大量时间。我想弄清楚的是,在等待资源可用时,有多少是合理的延迟,有多少是由于锁定结构的实现和细节造成的。我只处理一个包含多个线程的进程,并且正在考虑更改为关键部分。长期自动化测试表明我不需要互斥类提供的超时。

因此问题来了,有没有人知道任何与不同 Windows 平台上的不同 MFC 锁定机制的性能开销相关的引用文档?

最佳答案

据我所知,Win32 Mutex 是一个成熟的内核对象。这意味着对 Mutex 的任何调用都将涉及系统调用。这通常会使缓存无效,因此可能会非常昂贵。

关键部分是在没有争用的情况下不使用内核的用户端对象。这可能是使用 x86 LOCK 汇编指令或类似指令来保证原子性的。由于没有进行系统调用,它会更快,但因为它不是内核对象,所以无法从另一个进程访问临界区。

关于c++ - C++中互斥锁和临界区之间的性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7712584/

相关文章:

c# - 从 CRM 加载数据的性能问题

c++ - 如何将虚拟键码转换为字符码?

c++ - 模板化模式对象和外部密码对象有什么区别?

javascript - 为什么当 Dev Console 启动时我在 Chrome 中获得更好的性能?

c++ - 在 C++ 中存储非 nul 终止的 C 字符串常量

python - 用 c++ 重写这个 python 函数似乎让它运行得慢了很多。这合理吗?

c++ - 无法更改 MFC 应用程序图标

c++ - 是否可以将 MS 单元测试从 EXE 转发到 DLL?

c++ - Mac OS X Mountain Lion 和 Mavericks 上是否有任何替代 valgrind 的方法来检测 C/C++ 应用程序的内存泄漏?

c++ - 创建 Matlab MEX 函数时,是否将 mexFunction 放在 C++ 头文件或源文件中?