iOS多线程锁
2019-01-29 本文已影响40人
昵称是乱起的
多线程的几种锁
OSSpinLock(自旋锁,等待锁的线程会处于忙等状态,一直占用着CPU资源,还会出现优先级反转的问题,如果低优先级的锁先加锁了,等待锁的线程优先级较高,它会一直占用着CPU资源,优先级低的线程就无法释放锁。适用于简单轻量级数据访问的操作,在sideTable源码引用计数+1-1的那里看见过)
下面的都是互斥锁,等待的时候会处于休眠状态
os_unfair_lock
pthread_mutex
dispatch_semaphore
dispatch_queue(DISPATCH_QUEUE_SERIAL)
NSLock
NSRecursiveLock
NSCondition
NSConditionLock
@synchronized
两种常用的读写锁
pthread_rwlock:读写锁
dispatch_barrier_async:异步栅栏调用
semaphore的底层原理
dispatch_semaphore_create()
struct semaphore {
int value;
List<thread>;
}
image.png
image.png
,