C中互斥和临界区之间的性能差异

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

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

因此,问题是,是否有人知道有关不同Windows平台上不同MFC锁定机制的性能开销的任何参考文档?

解决方法:

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

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

上一篇:Git大文件上传


下一篇:c – 如何解锁boost :: upgrade_to_unique_lock(由boost :: shared_mutex制作)?