面试题答案
一键面试- 减少锁的粒度
- 解释:将大的共享资源拆分成多个小的部分,每个部分使用单独的
Mutex
保护。这样不同线程可以同时访问不同部分的资源,而不必等待整个大资源的锁,从而减少线程竞争,提高并发性能。例如,一个包含多个字段的结构体,如果不同线程通常只访问其中部分字段,就可以为每个字段或相关字段组使用单独的Mutex
。
- 解释:将大的共享资源拆分成多个小的部分,每个部分使用单独的
- 使用读写锁(
RwLock
)- 解释:当读操作远远多于写操作时,使用
RwLock
更合适。读操作可以同时进行,只有写操作需要独占锁。多个线程可以同时获取读锁来读取共享资源,而写操作需要获取写锁,此时其他读写操作都被阻塞。这能有效减少读操作的等待时间,提高整体性能。比如在一个数据缓存场景中,大部分操作是读取缓存数据,偶尔进行更新操作,就适合使用RwLock
。
- 解释:当读操作远远多于写操作时,使用
- 合理安排锁的获取顺序
- 解释:确保所有线程以相同的顺序获取多个锁。如果线程A先获取锁
Mutex1
再获取锁Mutex2
,那么线程B也按照同样顺序获取,这样可以避免死锁,并且减少线程等待锁的时间,提高性能。例如在涉及多个资源操作时,按照资源的某种固定顺序(如资源ID从小到大)获取锁。
- 解释:确保所有线程以相同的顺序获取多个锁。如果线程A先获取锁