zoukankan      html  css  js  c++  java
  • GCD栅栏函数dispatch_barrier

    需求: 有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的区别:

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

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

     

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

     

     

  • 相关阅读:
    数据库三大范式
    idea连接sqlite
    Javascript中==和===的区别
    手机商城项目(修饰技术)
    FastJSON、Gson、Jackson(简单了解使用)
    SiteMesh配置下载使用(简单介绍)
    html5中event获取data和class
    jsp的4个作用域区别( pageScope、requestScope、sessionScope、applicationScope)
    <jsp:include>和<%@include file=""%>的区别(简单了解)
    Check-Point-Security-Gateway-BYOL-R77.30-041.161
  • 原文地址:https://www.cnblogs.com/dashengios/p/10416063.html
Copyright © 2011-2022 走看看