锁是防止资源竞争的一种机制
操作系统层
自旋锁(spinlock):非阻塞,循环获取直到成功为止,不涉及线程上下切换,适用于线程持有锁的时间较短,锁获取和释放频繁的场景
互斥锁(mutex):阻塞,线程获取锁失败时会被阻塞直到锁释放后才被唤醒,涉及上下文切换
自适应锁(adaptive lock):先尝试用自旋锁获取,几次失败后使用互斥锁
Locks Aren't Slow; Lock Contention Is
锁状态
死锁
活锁
锁策略
独占锁(exclusive lock):写锁
共享锁(shared lock):读锁
可重入锁:可以对已经持有该锁的线程继续加锁,通过记录lock的次数实现,某个线程嵌套使用不可重入锁时会造成死锁
数据库系统
悲观锁
乐观锁
分布式系统
分布式锁
参考:聊聊常见的锁