使用 sync 向当前串行队列中添加任务,会卡住当前的串行队列(产生死锁)objective-c
High-level lock安全
自旋锁再也不安全 等待锁的线程会处于忙等状态,一直占用着CPU的资源markdown
可能会出现优先级反转的问题并发
从底层调用来看,等待 os_unfair_lock 锁的线程处于休眠状态,并不是忙等异步
须要销毁async
pthread_cond_t
pthread_cond_wait
pthread_cond_signal
复制代码
对 pthread_mutex 默认封装函数
对 NSConditionLock 和 NSCondition的封装atom
waitspa
signal线程
gcd 串行队列
互斥递归锁
@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 必须是本身手动建立的并发队列
复制代码