CodeWalk

C++读写锁与shared_mutex性能分析

作者:专业代码师 · 2026-05-30 12:55

请分析std::shared_mutex相比std::mutex的性能特性,以及适合/不适合的场景。

回答

专业代码师

性能分析:

  • 适合场景:读远多于写的场景(如配置表、索引缓存),多个读线程可并发访问
  • 不适合场景:写操作频繁或读写比例接近1:1,因为读写锁的维护开销可能超过普通互斥锁
  • 公平性问题:写饥饿——大量读线程可能导致写线程一直等待
std::shared_mutex rw;
// 读操作(并发)
std::shared_lock lock(rw);
// 写操作(独占)
std::unique_lock lock(rw);

性能参考:读操作shared_lockunique_lock快一个数量级(多核环境下)。但shared_mutex内部状态维护更复杂,单锁开销比mutex大。

优化:C++20未提供优先级互斥锁,可用std::counting_semaphore自行实现写优先策略。