美文网首页
关于在 MainQueue 中调用 sync 会造成死锁

关于在 MainQueue 中调用 sync 会造成死锁

作者: ZyonPaul | 来源:发表于2018-04-12 09:56 被阅读7次

    首先需要明白 Queue 与 Thread 之间的关系。
    SerialQueue 是串行队列, 有一个线程与之对应。
    ConcurrencyQueue 为并发队列, 并发队列会根据 queue 中的 Task 数量与执行情况开启一个或多个线程。

    synchronize 同步方法会阻塞当前线程,并在 sync 所需要执行的 Task 执行完之后重新激活当前线程。

    因此, 当在 SerialQueue 的线程里向该 SerialQueue 中 sync 一个 Task 时,会挂起该 SerialQueue 所在的线程,等待该 Task 执行完毕。但该 Task 需要在该线程中执行,由于该线程已被挂起,所以 Task 永远不会被执行完毕。造成死锁。
    (同理可理解至 MainQueue 中的情况)

    在 ConcurrencyQueue 中 sync 一个 Task 时,会挂起执行中的线程, 另开辟一个线程去执行该 Task ,故不会造成死锁。

    相关文章

      网友评论

          本文标题:关于在 MainQueue 中调用 sync 会造成死锁

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