Notes

Locks

Lock(锁) 是最常用的同步工具

通常用于保护一段关键的代码,这段代码在同一时刻只能有一条线程可以执行

锁的种类

Mutex

互斥锁,全称:MUTually EXclusive lock

Recursive lock

递归锁,是 Mutex 的一种变体

Read-write lock

读写锁,这种锁适用于频繁读,偶尔写的程序,相对于其他锁,可以极大提高性能

工作原理

macOS 和 iOS 只支持 POSIX 的读写锁

Distributed lock

分布式锁

Distributed lock 提供的是进程级别(process level)的 Mutex, 但与上面所说的 Mutex 不同,distributed lock 并不会阻塞或组织一个进程的运行,而是将锁的状态报告回对应的进程,由进程自己决定后面怎么继续

Spin lock

自旋锁

工作原理

适用于

但由于 polling 的特点, macOS 并不提供 Spin lock 的实现,而是交由开发者根据实际情况进行实现

Double-checked lock

双重检查锁

Double-checked lock 目的在于获得锁之前减少开销,做法是通过测试锁的一些标准条件来判断是否可以获得锁

但是 Double-checked lock 有潜在的不安全性,因此并不鼓励使用,macOS 也没有提供明确的支持