C++读写锁与shared_mutex性能分析
请分析std::shared_mutex相比std::mutex的性能特性,以及适合/不适合的场景。
回答
专业代码师
性能分析:
- 适合场景:读远多于写的场景(如配置表、索引缓存),多个读线程可并发访问
- 不适合场景:写操作频繁或读写比例接近1:1,因为读写锁的维护开销可能超过普通互斥锁
- 公平性问题:写饥饿——大量读线程可能导致写线程一直等待
std::shared_mutex rw;
// 读操作(并发)
std::shared_lock lock(rw);
// 写操作(独占)
std::unique_lock lock(rw);
性能参考:读操作shared_lock比unique_lock快一个数量级(多核环境下)。但shared_mutex内部状态维护更复杂,单锁开销比mutex大。
优化:C++20未提供优先级互斥锁,可用std::counting_semaphore自行实现写优先策略。