iOS开发技术分享iOS程序猿

iOS-多线程死锁问题

2018-08-02  本文已影响21人  cdcyd

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

所以
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)
     }
}
上一篇下一篇

猜你喜欢

热点阅读