关于deadlock的一些举例就不再重复了, 可以参考此链接
首先明确一点,DispatchQueue.main获得的mainQueue实际上是一个串行队列, mainQueue里不能开辟子线程. 在一个串行队列的sync task里又加入一个sync task会导致deadlock.
如以下代码片段
init(){
self.testDeadLock();
}
func testDeadLock(){
print("准备deadlock吧");
DispatchQueue.main.sync {
print("deadlock");
}
}
实际上可以理解成这个样子, 结合参考文章里讲的就很容易理解了.
init(){
DispatchQueue.main.sync {
print("准备deadlock吧");
DispatchQueue.main.sync {
print("deadlock");
}
}
}