知识卡片

读写锁看比例

普通读书笔记卡 · 1484.a.1

内容

读写锁允许多个读者并行,但写者需要独占。它适合读多写少且读操作足够重的场景;如果临界区很短或写频繁,普通互斥锁反而更简单稳定。

参考来源

- 位置:《Go语言底层原理剖析》第17章《并发控制》17.4.5节《读写锁》 - 结论依据:原文明确"读写锁通过两种锁来实现,一种为读锁,另一种为写锁……多个协程可以同时获得读锁并执行。如果此时有协程申请了写锁,那么该写锁会等待所有的读锁都释放后才能获取写锁继续执行",并总结"可能有多个协程获得读锁,但只有一个协程获得写锁",因此可以推出"读写锁允许多读并行、写者独占,适合读多写少场景"的结论。 - 原始内容:在同一时间内只能有一个协程获取互斥锁并执行操作,在多读少写的情况下,如果长时间没有写操作,那么读取到的会是完全相同的值,完全不需要通过互斥的方式获取,这是读写锁产生的背景。读写锁通过两种锁来实现,一种为读锁,另一种为写锁。当进行读取操作时,需要加读锁,而进行写入操作时需要加写锁。多个协程可以同时获得读锁并执行。如果此时有协程申请了写锁,那么该写锁会等待所有的读锁都释放后才能获取写锁继续执行。