iOS面试相关iOS

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

上一篇下一篇

猜你喜欢

热点阅读