案例1 中 在主队列(主队列也是一个串行队列)中同步添加block任务,导致主线程等待dispatch_sync函数执行完后处理block,而block等待主线程执行dispatch_sync函数结束,函数结束又需要block执行结束,导致相互等待,产生死锁.
案例2 中,另外开了一个串行队列,与主队列不是相同的串行队列,不会产生相互等待对方,因此不会死锁.
前面讲过,在某一个串行队列中,同步的向这个队列添加任务会产生死锁,案列3 就是在myqueu这个串行队列中同步添加任务3,导致死锁.
异步 dispatch_async,或者 使用不相同的串行队列.
1、要求每个事务一次就将所有要使用的数据全部加锁,否则不能执行。2、采用按序加锁法.预先规定一个封锁顺序,所有的事务都必须按这个顺序对数据执行封锁。
3、不采取任何措施来预防死锁的发生,而是周期性地检查系统中是否有死锁.如果发现死锁就设法解除。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)