栅栏函数

57 阅读1分钟
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    [self barrier];
}

- (void)barrier {
    //需求:有4个任务,要求开启多条线程来执行这些任务
    //增加需求:新的任务++++++,要求在12执行之后执行,要保证该任务执行完之后才能执行后面的34任务
    
    //栅栏函数:前面的任务并发执行,后面的任务也是并发执行
    //当前面的任务执行完毕之后执行栅栏函数中的任务,等该任务执行完毕后再执行后面的任务
    //⚠️ 不能使用全局并发队列
    
    //01 获得队列
    dispatch_queue_t queue = dispatch_queue_create("Test", DISPATCH_QUEUE_CONCURRENT);
    //dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
    
    //02 封装任务,并且添加到队列
    dispatch_async(queue, ^{
        NSLog(@"1-----%@",[NSThread currentThread]);
    });
    
    //栅栏函数===========================================
    dispatch_barrier_async(queue, ^{
        NSLog(@"1+++++++++++");
    });
    
    dispatch_async(queue, ^{
        NSLog(@"2-----%@",[NSThread currentThread]);
    });
    
    //栅栏函数===========================================
    dispatch_barrier_async(queue, ^{
        NSLog(@"2+++++++++++");
    });
    
    dispatch_async(queue, ^{
        NSLog(@"3-----%@",[NSThread currentThread]);
    });
    
    //栅栏函数===========================================
    dispatch_barrier_async(queue, ^{
        NSLog(@"3+++++++++++");
    });
    
    dispatch_async(queue, ^{
        NSLog(@"4-----%@",[NSThread currentThread]);
    });
    
    //栅栏函数===========================================
    dispatch_barrier_async(queue, ^{
        NSLog(@"4+++++++++++");
    });
    
    
    dispatch_async(queue, ^{
        NSLog(@"5-----%@",[NSThread currentThread]);
    });
    
    dispatch_async(queue, ^{
        NSLog(@"6-----%@",[NSThread currentThread]);
    });
    
    dispatch_async(queue, ^{
        NSLog(@"7-----%@",[NSThread currentThread]);
    });
    
    dispatch_async(queue, ^{
        NSLog(@"8-----%@",[NSThread currentThread]);
    });
}

@end