美文网首页
dispatch_sync和dispatch_barrier_s

dispatch_sync和dispatch_barrier_s

作者: 再好一点点 | 来源:发表于2019-03-23 16:28 被阅读0次

二者因为是sync提交,所以都是阻塞当前提交Block线程。
而它俩唯一的区别是:dispatch_sync并不能阻塞并行队列。

dispatch_queue_t queue = dispatch_queue_create("com.yahui.queue", DISPATCH_QUEUE_CONCURRENT);
dispatch_sync(queue, ^{
    dispatch_async(queue, ^{
        NSLog(@"任务二");
    });
    dispatch_async(queue, ^{
        NSLog(@"任务三");
    });
    //睡眠2秒
    [NSThread sleepForTimeInterval:2];
    NSLog(@"任务一");
});

输出结果 :

任务三
任务二
任务一

很显然,并行队列没有被sync所阻塞。
dispatch_barrier_sync可以阻塞并行队列(栅栏作用的体现):

dispatch_queue_t queue = dispatch_queue_create("com.yahui.queue", DISPATCH_QUEUE_CONCURRENT);
    dispatch_barrier_sync(queue, ^{
        dispatch_async(queue, ^{
            NSLog(@"任务二");
        });
        dispatch_async(queue, ^{
            NSLog(@"任务三");
        });
        //睡眠2秒
        [NSThread sleepForTimeInterval:2];
        NSLog(@"任务一");
    });

输出结果 :

任务一
任务二
任务三

如果上述结果看不明白请参考:dispatch_group_t和dispatch_barrier_async 同步多线程任务

相关文章

  • dispatch_sync和dispatch_barrier_s

    二者因为是sync提交,所以都是阻塞当前提交Block线程。而它俩唯一的区别是:dispatch_sync并不能阻...

  • GCD学习(六) dispatch_async 和dispatc

    GCD学习(六) dispatch_async 和dispatch_sync dispatch_sync(),同步...

  • 2018 多线程

    1. dispatch_async/dispatch_sync dispatch_sync: 同步/阻塞当前的...

  • gcd 死锁

    同步、异步:使用dispatch_sync(同步) :dispatch_sync 方法会被加入当前队列,而且dis...

  • GCD底层

    一、同步执行dispatch_sync 1.1 锁的原因 我们都知道,当使用dispatch_sync在串行队列上...

  • GCD的使用

    1.dispatch_async和dispatch_sync的区别 (来自http://www.cnblogs.c...

  • GCD学习(七) dispatch_apply

    GCD学习(七) dispatch_apply dispathc_apply 是dispatch_sync 和di...

  • GCD学习 dispatch_apply

    dispathc_apply 是dispatch_sync 和dispatch_group的关联API. 它以指定...

  • GCD学习 dispatch_apply

    dispathc_apply 是dispatch_sync 和dispatch_group的关联API. 它以指定...

  • dispatch_apply

    作用: dispatch_apply函数是dispatch_sync函数和Dispatch Group的关联API...

网友评论

      本文标题:dispatch_sync和dispatch_barrier_s

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