美文网首页
GCD自定义队列的学习小结(swift)

GCD自定义队列的学习小结(swift)

作者: 马路边的油酥饼 | 来源:发表于2017-02-09 11:44 被阅读0次

    1.创建自定义队列

    (1.)DispatchQueen(label:"") 默认为串行队列

    //串行

    let serialQueen = DispatchQueue(label:"serial");

    serialQueen.sync {

    print("最先加入的任务")

    }

    serialQueen.sync {

    print("次之加入的任务")

    }

    print("最后的任务")

    当前线程等待串行队列中的子线程执行完成之后再执行,串行队列中先进来的子线程先执行任务,执行完成后,再执行队列中后面的任务。

    自定义串行队列嵌套执行同步任务会发生死锁(自定义串行队列异步嵌套执行同步任务同理)

    let serialQueen = DispatchQueue(label:"serial");

    serialQueen.sync {

    print("会执行的代码")

    serialQueen.sync {

    print("不会执行的代码")

    }

    }

    串行队列中的线程顺序执行,需等到上面的同步任务执行完毕开启下面的同步任务。而上面的同步任务还没有执行完。要等到下面的大括号才算执行完毕。但是下面的同步任务已经抢占资源了,所以它们会产生相互等待的转态。

    自定义并发队列同步嵌套执行任务不会发生死锁

    //并发

    let concurrentQueue = DispatchQueue(label: "name", attributes: .concurrent)

    concurrentQueue.sync {

    print("会执行的代码")

    concurrentQueue.sync {

    print("会执行的代码")

    }

    }

    因为是并发队列,第一个大括号里的任务不会相互等待,不会产生死锁。

    相关文章

      网友评论

          本文标题:GCD自定义队列的学习小结(swift)

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