iOS-多线程死锁问题

作者: cdcyd | 来源:发表于2018-08-02 11:51 被阅读21次

虽然作者在开发中经常会用到多线程,但是对于死锁、线程阻塞等问题还是比较模糊,一般都是先写吧,有问题再改,现在闲下来了,是时候总结一波了,本文主要总结一下同步/异步、串行/并行、死锁、线程阻塞等问题

  • 串行/并行
    串行(Serial Queue):同一时间内,队列中只能执行一个任务,只有当前的任务执行完成之后,才能执行下一个任务
    并行(concurrent Queue):同时允许多个任务执行(并行队列中才会有多个线程,串行的只有一个线程)
  • 同步/异步
    同步(Sync):等到当前的任务执行完成,线程才会继续去执行下面的任务
    异步(Async):线程会立即返回,无需等待就会继续直线下面的任务
  • 死锁
    两个或以上的线程互相等待彼此执行,通常情况有(在同一串行队列中执行同步操作,或两个线程互相依赖等情况)
  • 阻塞
    只要是同步操作都会阻塞一个线程

所以
1.在遇到需要多线程相互依赖的情况,一定要注意,不要两个线程互相依赖,这样会造成死锁
2.在使用同步线程时,要注意不要在同一个串行队列中使用,还要注意线程阻塞问题

下面是相关代码
申请一个串行队列

// 串行
let serQueue = DispatchQueue(label: "serial")

申请一个并行队列

// 并行
let conQueue = DispatchQueue(label: "concurrent", attributes: .concurrent)

串行同步、串行异步

// 串行同步
serQueue.sync {
     print("串行同步")
}
// 串行异步
serQueue.async {
     print("串行异步")
}

并行同步、并行异步

// 并行同步
conQueue.sync {
     print("并行同步")
}
// 并行异步
conQueue.async {
     print("并行异步")
}

死锁情况
线程相互依赖

let opA = Operation()
let opB = Operation()

opA.addDependency(opB)
opB.addDependency(opA)

串行中同步

// 死锁
serQueue.async {
     serQueue.sync {
          print(1)
     }
}
serQueue.sync {
     serQueue.sync {
          print(1)
     }
}

相关文章

  • iOS-多线程死锁问题

    虽然作者在开发中经常会用到多线程,但是对于死锁、线程阻塞等问题还是比较模糊,一般都是先写吧,有问题再改,现在闲下来...

  • iOS-多线程-死锁

    所谓死锁,是指两个或两个以上的线程在执行过程中,因争夺资源(数据源、内存等,变量不是资源)而造成的一种相互等待的现...

  • jstack命令:教你如何排查多线程问题

    这是之前的一个死锁案例: 一个多线程死锁案例,如何避免及解决死锁问题? 如程序中发生这样的死锁问题该如何排查呢?我...

  • 面试官:连多线程问题你都一问三不知,还要我怎么“放水”?

    面试官:问你几个多线程相关的问题吧,说一下导致线程死锁的原因,怎么解除线程死锁? 程序员阿里:这个...死锁......

  • gdb调试多线程 如何解死锁问题

    基础_多线程 Q1 gdb调试多线程 如何解死锁问题?A1 gdb基本用法 info threads(show a...

  • 中级09 - Java多线程初步

    中级09 - Java多线程初步 介绍多线程带来的问题,以及基本解决方案。 竞争条件带来的数据错误问题 死锁的原...

  • Java自学-多线程 死锁

    Java 演示多线程死锁 当业务比较复杂,多线程应用里有可能会发生死锁 步骤 1 : 演示死锁 线程1 首先占有对...

  • Synchronized关键字详解2(对非object持锁)

    4.死锁:同步方法容易造成死锁。Java线程死锁是一个经典的多线程问题,因为不同的线程都在等待根本不可能被释放的锁...

  • gcd常见方法整理

    一、基础介绍 基本的gcd操作 多线程编程会产生资源竞争、死锁、内存大量消耗问题,但是我们还是要用多线程,why?...

  • 防止死锁的加锁机制

    防止死锁的加锁机制 问题 你正在写一个多线程程序,其中线程需要一次获取多个锁,此时如何避免死锁问题。 解决方案 在...

网友评论

    本文标题:iOS-多线程死锁问题

    本文链接:https://www.haomeiwen.com/subject/cwqjvftx.html