锁的分类
- 自旋锁 busy-waiting(忙等状态):线程获取锁,发现锁被占用,不断进行锁请求,直到获取。等待锁的线程处于忙等状态线程并会占用cpu资源;
- 互斥锁 sleep-waiting(休眠状态):线程获取锁,发现锁被占用,就向系统申请锁空闲时唤醒他并立刻休眠。等待锁的线程处于休眠状态,并不会占用cpu资源;互斥锁分为递归(可递归调用)、非递归;
- 特殊锁读写锁;
- OSSpinLock -- 自旋锁 iOS10及以后弃用
- os_unfair_lock -- 互斥锁 iOS10以后替代OSSpinLock使用
- NSLock -- 互斥锁
- NSCondition -- 互斥锁
- NSConditionLock -- 互斥锁
- dispatch_semaphore -- 互斥锁
- pthread_mutex -- 互斥锁(可设置:递归)
- NSRecursiveLock -- 递归锁
- @synchronized -- 递归锁
pthread_rwlock读写锁
NSLock、NSCondition、NSConditionLock、NSRecursiveLock的底层实现都是基于pthread_mutex;