特性
- 互斥(mutual exclusion)互斥即一次只允许一个线程持有某个特定的锁
- 可见性(visibility)确保释放锁之前对共享数据做出的更改对于随后获得该锁的另一个线程是可见的
-
分类
自旋锁(Spin lock)
- 自旋锁是指当一个线程尝试获取某个锁时,如果该锁已被其他线程占用,就一直循环检测锁是否被释放,而不是进入线程挂起或睡眠状态。
- 自旋锁适用于锁保护的临界区很小的情况,临界区很小的话,锁占用的时间就很短。
- 没法保证公平性,不保证等待进程/线程按照FIFO顺序获得锁
- 排队自旋锁 (Ticket Lock)
- MCS锁
CLH锁
CLH锁即Craig, Landin, and Hagersten (CLH) locks。CLH锁是一个自旋锁。能确保无饥饿性。提供先来先服务的公平性。
CLH锁也是一种基于链表的可扩展、高性能、公平的自旋锁,申请线程仅仅在本地变量上自旋,它不断轮询前驱的状态,假设发现前驱释放了锁就结束自旋。
