zoukankan      html  css  js  c++  java
  • 关于GCD的那些事

    一,死锁

    任务1 先加入主队列 并且已经开始执行 然后打印出1

      NSLog(@"任务1========%@",[NSThread currentThread]);

    这时任务2被下面这个函数也加入到主队列 并且同步执行

    系统就会觉得同步执行,不开新线程了

    任务2就要等block函数执行完成,不然不返回 主队列是串行的,要等任务1完成才能轮到任务2

    这是规矩 任务2是任务1的内部函数  必须等到任务1执行完才执行下一个任务,就造成任务1等任务2完成,任务2等任务1完成  从未造成 死锁

     dispatch_sync(dispatch_get_main_queue(), ^{//直接蹦在这

    NSLog(@"任务2========%@",[NSThread currentThread]);

     });

     NSLog(@"3========%@",[NSThread currentThread]);

    下面代码正常执行了,并且是顺序执行的,任务1在主队列中,但是任务2加入到了全局队列,这时候,任务1和任务2没有队列的约束,所以任务1就先执行喽,执行完毕之后函数返回,任务2接着执行。

     NSLog(@"任务1========%@",[NSThread currentThread]);

        dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

            NSLog(@"任务 2========%@",[NSThread currentThread]);

        });

        NSLog(@"任务3========%@",[NSThread currentThread]);

  • 相关阅读:
    Android学习---- 十月
    第17章 使用PHP和MySQL实现身份验证
    第13章 MySQL高级编程
    第12章 MySQL高级管理
    第11章 使用PHP从Web访问MySQL数据库
    第10章 使用MySQL数据库
    第9章 创建Web数据库
    第5章 代码重用与函数编写
    NOIP模拟赛-奶牛晒衣服(dry)
    BZOJ1008 /乘法原理+快速幂 解题报告
  • 原文地址:https://www.cnblogs.com/liaolijun/p/7902955.html
Copyright © 2011-2022 走看看