目录
Overview
Lock和Latch辨析
Lock
:抽象的,逻辑的,整体统筹Latch
:具体的,原语性的,自我管理
本节主要探讨Latch
。
设计目标
- 内存占用少,无竞态时执行迅速
- 等待时间过长时取消调度
大致分类
- 自旋锁(Test-and-Set Spin Latch)
- 阻塞互斥锁(Blocking OS Mutex)
- 读写锁(Reader-Writer Latches)
特性 | Test-and-Set Spinlock | Blocking OS Mutex | Reader-Writer Locks |
---|---|---|---|
实现 | 基于原子操作的自旋等待 | 操作系统级阻塞 | 允许多读单写 |
锁争用时的处理 | 自旋等待,消耗 CPU | 阻塞等待,减少 CPU 消耗 | 读操作可以并发,写操作排他 |
适用场景 | 短期锁、轻度锁争用 | 长期锁、重度锁争用 | 读多写少 |
优点 | 无上下文切换,性能高 | 避免自旋消耗,适合长时间等待 | 读写并发,适合读多写少 |
缺点 | CPU 资源消耗高,锁持有时间长时效率低 | 上下文切换开销较高 | 写者饥饿问题 |
C++中的mutex -> pthread -> Linux futex(fast user mutex):先在用户空间用自旋锁,如果获取不到锁,陷入内核态调用阻塞锁进入阻塞队列。
Hash Table Latches
两种粒度:Page Latches和Slot Latches