iOS 死锁原理以及解决方案

iOS 死锁原理以及解决方案,第1张

案例1 产生死锁,案例2 没有,其实本质原因就在于死锁产生的本质是

案例1 中 在主队列(主队列也是一个串行队列)中同步添加block任务,导致主线程等待dispatch_sync函数执行完后处理block,而block等待主线程执行dispatch_sync函数结束,函数结束又需要block执行结束,导致相互等待,产生死锁.

案例2 中,另外开了一个串行队列,与主队列不是相同的串行队列,不会产生相互等待对方,因此不会死锁.

前面讲过,在某一个串行队列中,同步的向这个队列添加任务会产生死锁,案列3 就是在myqueu这个串行队列中同步添加任务3,导致死锁.

异步 dispatch_async,或者 使用不相同的串行队列.

1、要求每个事务一次就将所有要使用的数据全部加锁,否则不能执行。

2、采用按序加锁法.预先规定一个封锁顺序,所有的事务都必须按这个顺序对数据执行封锁。

3、不采取任何措施来预防死锁的发生,而是周期性地检查系统中是否有死锁.如果发现死锁就设法解除。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9886965.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存