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

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

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

     

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

     

     

  • 相关阅读:
    php RSA公钥私钥加解密和验证用法
    php格式化RSA公钥私钥字符串
    你的周末时光是什么样的?
    php-redis 消息订阅笔记
    php redis 常用操作
    MySql索引笔记
    yii1框架,事务使用方法
    python 项目打包成exe可执行程序
    Linux修改默认端口
    C++字符串作为参数的传递
  • 原文地址:https://www.cnblogs.com/dashengios/p/10416063.html
Copyright © 2011-2022 走看看