• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ios > 问题背后的问题读后感iOSGCD队列阻塞问题

问题背后的问题读后感iOSGCD队列阻塞问题

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-05

佚名通过本文主要向大家介绍了问题背后的问题读后感,队列问题,队列求解迷宫问题,士兵队列训练问题,用队列求解迷宫问题等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:问题背后的问题读后感 iOS GCD队列阻塞问题
描述:

代码1

dispatch_queue_t mainQueue = dispatch_get_main_queue();
dispatch_sync(mainQueue, ^{
    NSLog(@"为啥堵塞");
});

代码2

dispatch_queue_t queue = dispatch_queue_create("abc", DISPATCH_QUEUE_SERIAL);
dispatch_sync(queue, ^{
    NSLog(@"为啥不堵塞");
});

如上,两段代码,都运行在主线程中,mainQueue也是串行队列,为什么代码1会造成线程阻塞,而代码2不会阻塞?或者说代码2不会阻塞大家可能都了解,为什么在主队列调用dispatch_sync就会阻塞?


解决方案1:

为什么1会阻塞?因为1是主线程,runloop会时时监听和更新UI,你这里给它安排一个同步sync肯定阻塞,应该用异步async。
为什么2不会阻塞?不是不会阻塞,只是不会阻塞主线程,因为你这里新建的一个子线程,如果你在这个子线程里写个while(TRUE),然后再用这个子线程来同步(sync)一个操作,你看看会不会阻塞这个子线程。

解决方案2:

第一个是阻塞mainQueue, 然后让mainQueue去把block里面的东西加到mainQueue中去
第二个是阻塞dispatch_queue_create("abc", DISPATCH_QUEUE_SERIAL), 然后让mainQueue把block里面的东西加到dispatch_queue_create("abc", DISPATCH_QUEUE_SERIAL)中去.

解决方案3:

循环等待。你在主线程同步派发一个任务,那主线程就要等这个任务执行完才继续执行。而你又把任务派发在主线程,主线程现在在等待这个完成继续执行,这个任务又在等待主线程空闲来执行。

解决方案4:

  • 1

    App:主线程,你过来,给你个任务,任务完成后再走
    主线程:什么任务?
    App:你去那边打印机上,打印个东西,但是你不能离开这里,完成后才能走
    主线程:……
    
  • 2

    App:主线程,你过来,给你个任务,任务完成后再走
    主线程:什么任务?
    App:你叫 **abc** 去那边打印机上,打印个东西,但是你不能离开这里,完成后才能走
    主线程:**abc**,快去打印个东西,现在就要!


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 问题背后的问题读后感cocopod语法的一个问题
  • 问题背后的问题读后感远程仓库的问题
  • 问题背后的问题读后感iosloading问题
  • 问题背后的问题读后感iOSGCD队列阻塞问题

相关文章

  • 2017-06-05 oc调用c写的函数时出现Undefinedsymbolsforarchitecturearmv7,求懂混编的大神解答
  • 2017-06-05 iOSimageView渲染的问题
  • 2017-06-05 ios手势拖拽问题
  • 2017-06-05 无法删除文件无法读源文件或磁盘UITableView无法滚动到底部
  • 2017-06-05 ios8上怎么通过dlopen加载framework中的动态库文件
  • 2017-06-05 qq微信下载手机版QQ微信添加下载APP下栏有什么方式解决?
  • 2017-06-05 混合开发中native和web之间如何传递token
  • 2017-06-05 iosswift多个界面,viewcontroller应该怎么写呢?纯代码
  • 2017-06-05 qq空间上传照片失败bitcode上传失败
  • 2017-06-05 新接手项目,60000+内存泄漏,如何破,有什么好方法!!!

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 设置UICollectionViewFlowLayout的minimumLineSpacing不起作用怎么回事?
    • xcode工程备份
    • 如何让AppSotre检测到升级过的app并让它自动更新?
    • ios开发中json数据解析模型属性description冲突问题。
    • UITableView显示富文Html列表,有什么实现方案
    • 为什么应用没有设置provisioningprofile的地方了
    • iospush切换视图的时候,返回时,怎样自定义动画?
    • 关于AFN中AFNetworkActivityIndicatorManagerKVO的疑问?
    • 求iOS音视频实时采集编码H264+AACdemo
    • 请教大神一个自定义按钮问题,3q

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有