多线程

2020-07-24  本文已影响0人  Oh丶Really

一、GCD

1、同步、异步 和 串行、并发

image

同步串行

问题1:
image
原因:队列引起的循环等待
image
问题2:
image
分析:
image
问题3:
image

异步串行

异步并发

问题1:
image
分析:GCD下没有对应的RunLoop的,而performSelector方法会在对应的RunLoop下执行,又此时无对应的RunLoop,所以会失效

2、dispatch_barrier_async

问题:怎样利用GCD实现多读单写
image

模型:


image

解决代码:


image
image

3、dispatch_group

问题:使用GCD实现,A、B、C三个任务并发,完成后执行任务D?

代码:


image image

二、NSOperation

需要和 NSOperationQueue 配合使用来实现多线程方案

1.任务执行状态控制

哪些状态?
状态的控制:
问题:系统是怎样移除一个 isFinished = YES 的 NSOperation?
解答:通过KVO;

三、NSThread

启动流程:


image

Start方法实现原理:

四、多线程与锁

iOS中常用的锁:

@synchronize

atomic

image

OSSpinLock

NSLock

问题:
image
解决:-- NSRecursiveLock 递归锁
image

dispatch_semaphore_t

相关函数:


image
1、dispatch_semaphore_create()
image
2、dispatch_semaphore_wait()
image
3、dispatch_semaphore_sigal()
image

总结:

上一篇 下一篇

猜你喜欢

热点阅读