在并发编程中,mutex 等锁机制常用于保护共享数据。当读写操作频率相近时,优化空间通常有限。针对读操作远多于写操作的场景,读写锁可实现多个读者并行访问,从而提升性能。该自旋锁专为极端多读少写场景设计(写操作频率极低但同步机制不可或缺),基于原子变量实现高效同步。
优点:
- 极低的读延迟:在多读者频繁读取场景下,性能显著优于
std::shared_mutex
缺陷:
- 较高内存占用:32个槽位配合64字节对齐,单锁占用2KB内存
(可通过减少槽位数降低内存占用,但可能导致性能下降) - 较高写延迟:
- 获取写锁需锁定所有槽位并等待所有读者退出
- 解锁需移除所有槽位的写标记
测试配置:8个读线程(每线程执行1,250,000次获取/释放读锁操作),10次测试平均吞吐量
(注:测试场景不包含写操作,符合锁设计目标)
| 锁类型 | 吞吐量 (百万操作/秒) | 相对性能 (基准: std::shared_mutex) |
|---|---|---|
std::shared_mutex |
17.2459 | 1.00x (基准) |
| SpinReadWriteLock | 555.8871 | 32.23x |
| UniqueReadWriteLock | 902.2784 | 52.32x |
| 组件 | 规格说明 |
|---|---|
| 编译器 | MSVC v143 x64 |
| 优化选项 | /O2 (最大速度优化) |
| CPU | Intel i7-11800H (8核/16线程) |
| 基础频率 | 2.3 GHz |
| 操作系统 | Windows 10/11 x64 (Build 19045.5737) |