美文网首页
iOS中对串行并行以及同步异步的理解

iOS中对串行并行以及同步异步的理解

作者: iStig | 来源:发表于2018-04-27 16:05 被阅读21次

面试题
1.以下代码会发生什么情况

//Situation 1:
    dispatch_sync(dispatch_get_main_queue(), ^{
            NSLog(@"NSTREAD-----%@",[NSThread currentThread]);
    });

//Situation 2:
    dispatch_queue_t queue = dispatch_queue_create("test", nil);
    dispatch_sync(queue, ^ {
        NSLog(@"NSTREAD-----%@",[NSThread currentThread]);
        dispatch_sync(queue, ^ {
        NSLog(@"NSTREAD-----%@",[NSThread currentThread]);
        });
    });

Stituation1
当前队列是主队列 `dispatch_get_main_queue()` 而主队列是串行队列。
当前queue上调用sync函数,并且sync函数中指定的queue也是当前queue。
需要执行的block被放到当前queue的对列尾部等待执行,
因为这是一个串行的queue,调用sync函数会阻塞当前队列,
等待block执行 -> 这个block因为永远没有机会执行 -> sync函数不返回,
所以当前队列就永远被阻塞了,这就造成了死锁。

Stituation2
当前队列是队列 'dispatch_queue_create("test", nil)' ,函数的第二个参数为nil,
则默认是DISPATCH_QUEUE_SERIAL串行队列。
由于外层sync指定了当前queue,内层sync也指定了当前queue,
这种情况类似Stituation1的情况,死锁的原因相同。

主队列和主线程

相关文章

  • iOS中的同步&异步 并行&串行

    以下是我个人对 iOS中的同步&异步 并行&串行 的理解,有不对的地方欢迎指正。 同步 异步 控制的是 “是否创建...

  • iOS中对串行并行以及同步异步的理解

    面试题1.以下代码会发生什么情况 主队列和主线程

  • iOS多线程小结

    同步异步串行并行 同步串行:不开启线程 同步并行:不开启线程 异步串行:最多开启一个线程 异步并行:开启线程 同步...

  • 多线程GCD的使用

    一、同步/异步、串行/并行的区别 1.同步/异步 同步/异步是指线程与线程之间的关系。 2.串行/并行 串行、并行...

  • GCD

    1、同步串行队列 2、同步并行队列 3、异步串行队列 4、异步并行队列 5、死锁 主线程中创建同步串行队列 主线程...

  • GCD基础总结一

    上代码~ 同步串行队列 同步并行队列 异步串行队列 异步并行队列 主队列同步 会卡住 主队列异步

  • GCD 小结

    一、 同步/异步、串行/并行的区别 1.同步/异步 同步/异步是指线程与线程之间的关系. 2.串行/并行 串行/并...

  • sync 和 async区别

    同步,异步,串行,并行

  • GCD

    同步、异步、串行、并行的概念 同步/异步:指的是能否开启新的线程,同步不能开启新的线程,异步可以。串行/并行:指的...

  • GCD 相关函数

    串行同步 串行异步 并行同步 并行异步 主队列同步 会死锁 主队列异步 异步处理耗时,回主线程刷新UI 栅栏函数 ...

网友评论

      本文标题:iOS中对串行并行以及同步异步的理解

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