码迷,mamicode.com
首页 > 其他好文 > 详细

GCD栅栏函数dispatch_barrier

时间:2019-02-22 00:29:59      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:barrier   ffffff   class   style   oba   apple   margin   阻塞   bsp   

需求: 有4个任务, 需要开启多条线程去执行。 有一个特殊任务0, 需要在1,2任务执行完后, 再执行3, 4任务。

dispatch_queue_t queue = dispatch_queue_create("test", DISPATCH_QUEUE_CONCURRENT);

 

    dispatch_async(queue, ^{

       

        NSLog(@"-------1----%@",[NSThread currentThread]);

    });

    dispatch_async(queue, ^{

        

        NSLog(@"-------2----%@",[NSThread currentThread]);

    });

 

 

//加入栅栏函数,执行任务0

 

  dispatch_barrier_async(queue, ^{//不能使用全局队列

       

        NSLog(@"barrier");

    });

 

  dispatch_async(queue, ^{

        

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

    });

    dispatch_async(queue, ^{

        

        NSLog(@"-------4----%@",[NSThread currentThread]);

    });

 

栅栏函数:  拦截前面的并发任务, 等待栅栏函数执行完后 ,再执行后面的并发任务。

警告:栅栏函数不能使用全局队列(global_queue)

 

dispatch_barrier_async 与 dispatch_barrier_sync的区别:

同步栅栏函数会等待栅栏函数内的任务执行完,再执行后面的主线程或者子线程任务。

异步栅栏函数不会等待栅栏函数内任务执行完,就会执行后面主线程的任务。

 

异步栅栏函数不会阻塞主线程。

 

 

GCD栅栏函数dispatch_barrier

标签:barrier   ffffff   class   style   oba   apple   margin   阻塞   bsp   

原文地址:https://www.cnblogs.com/dashengios/p/10416063.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!