美文网首页
GCD异步并发队列内加入同步任务的执行顺序

GCD异步并发队列内加入同步任务的执行顺序

作者: louuXinnn | 来源:发表于2018-10-23 20:44 被阅读0次
#import "ViewController.h"

@interface ViewController ()
@end

@implementation ViewController
- (void)viewDidLoad {

    //并发队列
    dispatch_queue_t q = dispatch_queue_create("myQueue", DISPATCH_QUEUE_CONCURRENT);
    //异步任务
    dispatch_async(q, ^{
        //同步并发
        dispatch_sync(q, ^{
            NSLog(@"AAAA %@", [NSThread currentThread]);
        });
        //异步并发
        dispatch_async(q, ^{
            NSLog(@"BBBB %@", [NSThread currentThread]);
        });
        //异步并发
        dispatch_async(q, ^{
            NSLog(@"CCCC %@", [NSThread currentThread]);
        });

        for (int i = 0; i < 10; i++) {
            NSLog(@"%d   %@", i, [NSThread currentThread]);
        }
    });
}
/** 打印结果
 2018-10-23 20:27:26.256127+0800 testttt[6530:334192] AAAA <NSThread: 0x600000276840>{number = 3, name = (null)}
 2018-10-23 20:27:26.256531+0800 testttt[6530:334192] 0   <NSThread: 0x600000276840>{number = 3, name = (null)}
 2018-10-23 20:27:26.256547+0800 testttt[6530:334186] BBBB <NSThread: 0x604000270d00>{number = 4, name = (null)}
 2018-10-23 20:27:26.256583+0800 testttt[6530:334184] CCCC <NSThread: 0x604000270dc0>{number = 5, name = (null)}
 2018-10-23 20:27:26.256785+0800 testttt[6530:334192] 1   <NSThread: 0x600000276840>{number = 3, name = (null)}
 2018-10-23 20:27:26.257096+0800 testttt[6530:334192] 2   <NSThread: 0x600000276840>{number = 3, name = (null)}
 2018-10-23 20:27:26.257256+0800 testttt[6530:334192] 3   <NSThread: 0x600000276840>{number = 3, name = (null)}
 2018-10-23 20:27:26.257444+0800 testttt[6530:334192] 4   <NSThread: 0x600000276840>{number = 3, name = (null)}
 2018-10-23 20:27:26.258598+0800 testttt[6530:334192] 5   <NSThread: 0x600000276840>{number = 3, name = (null)}
 2018-10-23 20:27:26.259088+0800 testttt[6530:334192] 6   <NSThread: 0x600000276840>{number = 3, name = (null)}
 2018-10-23 20:27:26.260051+0800 testttt[6530:334192] 7   <NSThread: 0x600000276840>{number = 3, name = (null)}
 2018-10-23 20:27:26.260641+0800 testttt[6530:334192] 8   <NSThread: 0x600000276840>{number = 3, name = (null)}
 2018-10-23 20:27:26.261221+0800 testttt[6530:334192] 9   <NSThread: 0x600000276840>{number = 3, name = (null)}
 */
@end

原因猜想:

-- 异步并发队列 中加入同步任务
-- 同步任务会占用并阻塞当前线程(打印AAAA)
-- 当同步任务执行完毕
-- 当前被阻塞的任务继续(打印0), 且B C 异步执行

纯粹个人猜想,如有问题请看官指导

相关文章

  • GCD学习总结

    GCD容易混淆的概念 任务,同步,异步 ,串行队列,并发队列 任务就是要做的事情 同步和异步是用来执行任务的 串行...

  • GCD异步并发队列内加入同步任务的执行顺序

    原因猜想: -- 异步并发队列 中加入同步任务-- 同步任务会占用并阻塞当前线程(打印AAAA)-- 当同步任务执...

  • GCD与NSOperation之间的区别

    GCD: 将任务(block)添加到队列(串行/并发/主队列),并且指定任务执行的函数(同步/异步)GCD是底层的...

  • 2019 iOS面试题-----多线程相关之GCD、死锁、dis

    GCD---同步/异步 ,串行/并发 死锁 GCD任务执行顺序 dispatch_barrier_async di...

  • GCD的学习笔记(One)

    并行和并发 GCD简介 GCD的任务 GCD的队列 GCD创建队列或获取队列的方法 任务的执行方式:同步执行(同步...

  • GCD和NSPoeration的区别

    GCD将任务(block)添加到队列(串行/并发/主队列),并且制定任务执行的函数(同步/异步)GCD是底层的C语...

  • GCD之简介

    1.多线程方案介绍 2.GCD中常用函数 同步执行 异步执行 3.GCD中常用队列 并发队列可以让多个任务并发(同...

  • 队列dispatch_queue的使用

    队列分为:串行队列、并发队列和主队列,主队列也叫特殊串行队列,是GCD自带的。 任务的执行分为:同步执行和异步执行...

  • iOS - 多线程(二) GCD讲解

    目录: 1.GCD简介2.串行队列 + 同步执行3.串行队列 + 异步执行4.并发队列 + 同步执行5.并发队列 ...

  • 多线程

    iOS中的几种多线程GCD1、GCD分为任务和队列,任务(同步,异步)队列(串行,并发),同步串行,同步主队列的情...

网友评论

      本文标题:GCD异步并发队列内加入同步任务的执行顺序

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