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

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

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

     

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

     

     

  • 相关阅读:
    区块链价值
    区块链路线图
    Hyperledger Fabric Orderer节点启动
    使用 Docker 部署 Grafana + Prometheus 监控 MySQL 数据库
    CentOS 7.x 安装 Docker-Compose
    关于 Abp 替换了 DryIoc 框架之后的问题
    [Abp 源码分析]十七、ASP.NET Core 集成
    使用 DryIoc 替换 Abp 的 DI 框架
    《CLR Via C#》读书笔记:27.计算限制的异步操作
    《CLR Via C#》读书笔记:26.线程基础
  • 原文地址:https://www.cnblogs.com/dashengios/p/10416063.html
Copyright © 2011-2022 走看看