多线程知识整理2

2020-07-03  本文已影响0人  化二缺

NSConditionLock

dispatch_queue

DISPATCH_QUEUE_SERIAL

dispatch_semaphore

@synchronized

@synchronized 是对mutex递归锁的封装

//苹果不推荐使用 因为性能不好 

@sychronized(self){
   [self doSomething];
}
---------------------------
// 保证锁不变 

static NSObject * lock;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    lock = [[NSObject alloc] init];
});
@synchronized(lock){
     [self doSomething];
}


iOS线程同步方案性能比较

image.png

//更推荐使用 dispatch_semaphore 和 pthread_mutex

自旋锁 互斥锁 比较

预计线程等待锁的时间很短
加锁的代码经常被调用,但竞争情况很少发生
CPU资源不紧张
多核处理器

预计线程等待锁的时间较长
单核处理器
临界区有IO操作
临界区代码复杂或者循环量大
临界区竞争非常激烈的

atomic

读写安全方案

image.png
image.png

pthread_rwlock 读写锁

dispatch_barrier_async

上一篇 下一篇

猜你喜欢

热点阅读