多线程
文章平均质量分 96
cheng_lin0201
3GiOS组k歌之王
展开
-
【iOS多线程(五)】多线程问题总结
答:自定义NSOperation可以通过重写main或者start方法。重写main方法,不需要管理操作的状态属性isExecuting和isFinished。重写start方法需要管理操作的状态属性。原创 2024-08-10 15:45:36 · 965 阅读 · 0 评论 -
【iOS多线程(四)】线程安全+13种锁
互斥锁属于sleep-waiting类型的锁。假设线程A想要通过pthread_mutex_lock操作去得到一个临界区的锁,而此时这个锁正在被线程B锁持有,那么线程A就会被阻塞(blocking),Core0会在此时进行上下文切换(Contex Switch)将线程A置于等待队列中,此时Core0就可以运行其他的任务(例如另一个线程C)而不必进行忙等待。使用案例:假设我们有一个数组,里面有两个线程,一个是添加数组,一个是删除数组,我们先调用删除数组,再调用添加数组,但是在数组为空的时候不调用删除数组。原创 2024-08-08 15:46:43 · 1241 阅读 · 0 评论 -
【iOS多线程(三)】优先级反转问题
概述优先级:线程C>线程B>线程A。优先级较低的线程B,通过压制优先级更低的线程A,比高优先级的线程C先执行了。解释:假如线程A拿到一个资源后加锁,线程C因为也需要这个资源于是挂起等待A执行结束。这一段符合逻辑没问题,但是此时线程B因为优先级比线程A高,直接抢占CPU,线程B执行完后,线程A执行,A解锁释放后,C再执行。这就导致原本优先级较低的线程B,通过压制线程A,比高优先级的线程C先执行了。下面这个时序图就是一个经典的优先级反转线程A在一个比较低的优先级上工作, 假设是10吧。原创 2024-08-08 09:31:18 · 930 阅读 · 0 评论 -
【iOS多线程(二)】GCD其他方法详解
以一个停车场的运作为例。简单起见,假设停车场只有三个车位,一开始三个车位都是空的。这时如果同时来了五辆车,看 门人允许其中三辆直接进入,然后放下车拦,剩下的车则必须在入口等待,此后来的车也都不得不在入口处等待。这时,有一辆车离开停车场,看门人得知后,打开 车拦,放入外面的一辆进去,如果又离开两辆,则又可以放入两辆,如此往复。在这个停车场系统中,车位是公共资源,每辆车好比一个线程,看门人起的就是信号量的作用。我们使用GCD的时候如何让线程同步,也有多种方法。原创 2024-08-07 19:41:15 · 992 阅读 · 0 评论 -
【iOS多线程(一)】GCD详细总结-同步异步/串行并发
1. GCD简介2. GCD任务和队列任务队列 (dispatch是派遣的意思)队列的创建方法和获取方法3.我的总结:同步和异步函数,并行和并发队列同步异步函数串行并发队列是否开启新线程,串行还是并发执行任务,如何分析?4. GCD基本使用同步串行队列同步并行队列异步串行队列异步并行队列sync函数造成的线程死锁5. 进程间通信6. GCD的其他方法6.1 GCD栅栏方法:dispatch_barrier_async6.2、GCD 延时执行方法:dispatch_after。原创 2024-08-07 12:03:27 · 1335 阅读 · 0 评论