You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Visual C++中std::mutex性能远差于std::shared_mutex?

问题原因分析

你观测到的现象是Windows平台下MSVC标准库的特有实现差异导致的,不属于C++标准规定的普遍行为,具体原因如下:

  • std::mutex的实现开销

    MSVC的std::mutex直接封装了Windows内核提供的CRITICAL_SECTION(临界区)对象:
    • 内存占用:64位Windows下CRITICAL_SECTION本身的大小就是80字节,和你测试的结果完全吻合。
    • 性能开销:临界区默认自带自旋优化,无竞争场景下每次加锁也会先执行固定次数的自旋逻辑,再判断锁是否可用,额外增加了无竞争场景下的操作开销。
  • std::shared_mutex的实现优势

    MSVC的std::shared_mutex直接封装了Windows Vista之后引入的SRW锁(Slim Reader/Writer Lock):
    • 内存占用:SRW锁是轻量级实现,本身仅持有一个指针大小的状态量,64位下大小为8字节,远小于临界区。
    • 性能开销:SRW锁的独占加锁逻辑在无竞争场景下仅执行最小必要的原子操作,没有额外的自旋开销,因此无竞争加锁速度比临界区更快。

注意:这个测试结果仅适用于无竞争场景 + Windows + MSVC 环境:

  1. 如果是多线程竞争锁的场景,两者的性能表现会随竞争程度变化,没有绝对的优劣;
  2. 如果切换到Linux等其他平台,结果会完全相反:glibc的std::mutex基于futex实现,64位下大小仅40字节,无竞争性能远优于std::shared_mutex。

内容的提问来源于stack exchange,提问作者Alex Guteniev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 08:24:04