GCD
NSOperation(NSNetWorking和图片异步下载)
NSThread (常驻线程的实现)
多线程与锁(线程间同步和资源共享)
GCD
-
同步/异步 和 串行/并发
-
dispatch_barrier_async
-
dispatch_group
-
GCD 同步/异步 和 串行/并发
- 同步串行
死锁,原因
另一个例子:
- 同步并发
答案:12345
- 异步串行
- 异步并发
dispath_barrier_async()
- 多读单写怎么实现?
读者和读者并发
读者和写者互斥
写者和写者互斥
异步栅栏调用
- dispatch_group
使用GDC实现需求ABC并发,并发执行完成后执行任务D
- 创建并发队列
- 创建一个group,执行在一组中
- dispatch_group_notify
NSOPeration
-
特点
可以添加以来(GCD和NSThread没有)
任务执行状态控制
设置并发量的控制 -
执行状态控制
isReady
isExcusing
isFinished
isCancelled
如重写main方法,底层控制。
如重写start方法,我们自行控制状态。
源码分析
系统是通过KVO来移除一个isFinished=YES的NSOperation的
NSThread
启动流程
start -> 创建Pthread -> main() -> perforSelector (runloop) -> exict()
- start方法
创建函数,在main函数中创建一个for循环,实现一个常驻的线程
锁
- @synchronized
- atomic
- NSSpinlock
- NSRecursiveLock
- NSLock
- dispatch_semaphore_t
- @synchronized
一半是使用单利对象使用的
-
atomic
修饰属性和关键字
原子性对复制操作有现成安全性 -
OSSpinLock自旋锁
循环等待询问,不释放当前资源
类似有个while循环
轻量级数据的访问,简单的int值+1 -1操作,系统使用自旋锁
- NSLock
上锁和解锁成对出现
冲入原因死锁,换成递归锁:
-
NSRecursiveLock
递归锁 -
dispatch_semaphore_t
信号量
dispatch_semaphore_creat
dispatch_semaphore_wait(信号量,时间)
dispatch_semaphore_signal(信号量)
多线程
怎么用GCD实现单读多写?
几种多线程计数的特点?
GCD简单的多线程,NSOparation的点在第三方中用,NSThread是实现一个常驻线程
NSOperation对象在FInished之后怎么存quene中移除掉的?(KVO)
你用过设么锁?结合实际谈谈你怎么使用的?
网友评论