iOS 锁相关

死锁

使用 sync 向当前串行队列中添加任务,会卡住当前的串行队列(产生死锁)objective-c

OSSpinLock (自旋锁)

High-level lock安全

自旋锁再也不安全 等待锁的线程会处于忙等状态,一直占用着CPU的资源markdown

可能会出现优先级反转的问题并发

os_unfair_lock

从底层调用来看,等待 os_unfair_lock 锁的线程处于休眠状态,并不是忙等异步

pthread_mutex (互斥锁)

须要销毁async

互斥锁 normal
递归锁

条件锁
pthread_cond_t

pthread_cond_wait

pthread_cond_signal
复制代码

NSLock

对 pthread_mutex 默认封装函数

NSRecursiveLock

NSCondition

对 NSConditionLock 和 NSCondition的封装atom

waitspa

signal线程

SerialQueue

gcd 串行队列

Semphore

@synthronized

互斥递归锁

@synthronized(obj)  obj 传递进去 syncData(hashmap)一个 obj 对应一把锁 (pmutext_lock) 
obj对应的递归锁,而后进行加锁、解锁操做

进入SyncData的定义,是一个结构体,主要用来表示一个线程data,相似于链表结构,有next指向,且封装了recursive_mutex_t属性,能够确认@synchronized确实是一个递归互斥锁
复制代码

自旋锁和互斥锁区别

自旋锁 (不休眠)
预计线程等待锁的时间很短
CPU资源不紧张

互斥锁
预计等待锁的时间较长
有IO操做
CPU资源紧张
复制代码

读写安全

atomic 读写加锁 可是 release 不加锁

多读单写

pthread_rwlock : 读写锁

等待的锁 会进入休眠
复制代码

dispatch_barrier_async:异步栅栏函数

queue 必须是本身手动建立的并发队列
复制代码