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

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

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

     

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

     

     

  • 相关阅读:
    用友U8 | 【基础设置】添加财务项目分类
    用友U8 | 【出纳管理】通过收支操作出纳收款生单,生成收款单表头信息带不过去
    MySQL经典45题(一)
    用友U8 | 【出纳管理】出纳模块银行日记账提示"已经加过类型为MD的锁"
    用友U8 | 【凭证打印】如何将凭证输出为PDF电子格式
    用友U8 | 【请购单列表】后台数据库导请购单列表
    用友U8 | 【数据权限档案分配】导出客户档案分配表
    用友U8 | 【出纳管理】收支操作,客户收款,出纳收款查询不了相关数据
    鼠标事件中鼠标的坐标是如何定义的
    Visual Studio 中各种文件后缀名是什么意思
  • 原文地址:https://www.cnblogs.com/dashengios/p/10416063.html
Copyright © 2011-2022 走看看