尽管确实是在读多写少的情况下使用,但系统在测试中确实出现线程互斥锁优于读写锁的情况,
muduo库中给出了多种互斥锁优于读写锁的原因:
1. 读锁加锁的开销不会比mutex小,因为它需要更新当前reader的数目,如果临界区很小,那么mutex往往更快。
实际上mutex是由整形变量及等待队列构成
2. 读锁可能提升为写锁,增大调试难度
实际上系统调试过程中的确出现过这样的问题,甚至导致死锁,当时是以这样顺序调用的:
写申请(获得写锁)->读申请(读申请被忽略)->释放(实际把写锁释放)->释放(实际获得读锁)->下次的写申请(卡死)
3. 写锁会阻塞后面的读锁,在要求读低延迟的情况下使用并不适当。
这条完全不明白。
至于spinlock与互斥锁的使用对比在这篇文章《Pthreads mutex vs Pthreads spinlock》介绍得十分清楚。