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

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

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

     

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

     

     

  • 相关阅读:
    hdu5926Mr. Frog’s Game
    hdu5926Mr. Frog’s Game
    hdu5924Mr. Frog’s Problem
    hdu5924Mr. Frog’s Problem
    hdu5922Minimum’s Revenge
    hdu5922Minimum’s Revenge
    带空格的字符串输入
    带空格的字符串输入
    382. Linked List Random Node
    319. Bulb Switcher
  • 原文地址:https://www.cnblogs.com/dashengios/p/10416063.html
Copyright © 2011-2022 走看看