iOS deadlock的理解

514 阅读1分钟

关于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");
        }
    }
}