小编pan*_*lei的帖子

为什么 concurrentQueue.sync 不会导致死锁

这段代码会死锁,因为:

  1. 他们在同一个线程中
  2. 打印(2)必须等待打印(3)
  3. 打印(3)必须等待打印(2)

例如:

DispatchQueue.main.async {
    print(Thread.current)
    DispatchQueue.main.sync {
        print(Thread.current)
        print(2)
    }
    print(3)
}
Run Code Online (Sandbox Code Playgroud)

为什么在concurrentQueue不会造成死锁?他们也在同一个线程中。

DispatchQueue.global().async {
    print(Thread.current)
    DispatchQueue.global().sync {
        print(Thread.current)
        print(2)
    }
    print(3)
}
Run Code Online (Sandbox Code Playgroud)

concurrency deadlock grand-central-dispatch ios

1
推荐指数
1
解决办法
642
查看次数