zoukankan      html  css  js  c++  java
  • 多线程GCD(二)

    GCD

     函数

     

    队列:

    队列和函数

     

     

     

    这里崩溃的原因是死锁:(相互等待执行完成)

    串行队列里面添加的顺序是:2 - block - 4 - 3

    因为是串行队列,所以4 的执行需要等待block执行,block执行完成依赖于3,3又要等待4执行完毕,所以造成死锁。

    队列:

    队列的特征是FIFO,并发队列也是先进先执行,只是不会等待一个任务执行完毕才执行下一个。

    //1. 通常的多个请求处理方法 

    //2. 使用全局队列,阻塞主线程

    //3. 使用任务的形式封装多个网络请求,不会阻塞主线程,可以执行其他的事情

    #pragma mark - 栈栏函数:dispatch_barrier_sync/dispatch_barrier_async (这里需要注意一个问题,就是栈栏函数一定要在自己创建的队列,不然没有效果,因为如果连全局队列也阻塞的话,系统就停止了,系统如果停止,那么也就没有意义了。)

     

    因为多线程导致的signal崩溃,线程BUG,很多线程去操作,但是操作不过来

     

     

    解决方式:加@synchronized锁

    或者:dispatch_barrier_sync栈栏函数

     栈栏函数总结:

    //    栈栏函数:

    //    1. 保证顺序执行

    //    2. 保证线程安全

    //    注意点:

    //    3. 一定要是自定义的并发队列

    //    4. 不是非常优秀

    //    5.如果是dispatch_barrier_async只阻塞当前的自定义并发队列,这种就不是很友好,因为别人在使用你的时候,不知道你是封装到一个队列中的,就完成不了顺序执行了,会出现问题,过度依赖于一个队列了,不利于封装。

    调度组:队列随便选,想在哪个队列执行就在哪个队列执行,就是不依赖与队列

     

    调度组的入组和出组必须成对的存在

    信号量控制并发数:

     

     diapatch_source:

    runlooprun 里面用到了一部分dispatch_source,在判断超时的时候

    dispatch_source 实现响应式,数据回调

     

     

     

  • 相关阅读:
    解决ActiveX插件ZIndex属性无效问题
    XNA游戏开发之字符篇
    XNA游戏开发之滚动背景
    ExtJs之FormPanel篇
    独立Discuz头像编辑模块
    XNA游戏开发之2D游戏
    WPF系列之应用程序生命周期
    DiscuzX2.0在windows下的配置
    Silverlight之out of Browser模式
    使用VisualStudio2010连接CodePlex进行代码管理
  • 原文地址:https://www.cnblogs.com/coolcold/p/12194537.html
Copyright © 2011-2022 走看看