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

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("会执行的代码")

}

}

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • iOS中GCD的使用小结 作者dullgrass 2015.11.20 09:41*字数 4996阅读 20199...
    DanDanC阅读 1,181评论 0 0
  • 本篇博客共分以下几个模块来介绍GCD的相关内容: 多线程相关概念 多线程编程技术的优缺点比较? GCD中的三种队列...
    有梦想的老伯伯阅读 1,075评论 0 4
  • 本篇博客共分以下几个模块来介绍GCD的相关内容: 多线程相关概念 多线程编程技术的优缺点比较? GCD中的三种队列...
    dullgrass阅读 38,078评论 28 236
  • GCD并发async & sync 很多程序都有一个主线程,对于iOS/MacOS开发来说,这个线程就是UI线程,...
    大军的阅读 1,177评论 0 0
  • 从哪说起呢? 单纯讲多线程编程真的不知道从哪下嘴。。 不如我直接引用一个最简单的问题,以这个作为切入点好了 在ma...
    Mr_Baymax阅读 2,886评论 1 17

友情链接更多精彩内容