GCD中dispatch_barrier的使用方法

假如现在有几组任务,我们并不关心每组中的各个任务的执行顺序,但是我们要求这几组任务按顺序分批进行,也就是说第一组任务全部执行之后,再启动第二组任务,以此类推。在这种情况下,我们使用 dispatch_barrier 函数将会非常高效,dispatch_barrier 函数又称作栅栏函数,顾名思义,就是像栅栏一样可以把不同任务分开。

在下面例子中,我们假设有两组任务,第一组包含任务 1 和任务 2,第二组包含任务 3 和任务 4,要求第一组任务执行完后再开始执行第二组任务:

NSLog(@"-- start --");
    
// 创建一个并行队列
dispatch_queue_t queue = dispatch_queue_create("com.jarypan.gcdsummary", DISPATCH_QUEUE_CONCURRENT);
    
// 向队列中追加任务
dispatch_async(queue, ^{
   
    [NSThread sleepForTimeInterval:1]; // 模拟耗时操作
    NSLog(@"task1 -- %@", [NSThread currentThread]);
});
dispatch_async(queue, ^{
   
    [NSThread sleepForTimeInterval:1]; // 模拟耗时操作
    NSLog(@"task2 -- %@", [NSThread currentThread]);
});
    
// 使用栅栏函数
dispatch_barrier_async(queue, ^{
   
    [NSThread sleepForTimeInterval:1]; // 模拟耗时操作
    NSLog(@"barrier task -- %@", [NSThread currentThread]);
});
    
// 在栅栏函数后边继续追加任务
dispatch_async(queue, ^{
   
    [NSThread sleepForTimeInterval:1]; // 模拟耗时操作
    NSLog(@"task3 -- %@", [NSThread currentThread]);
});
dispatch_async(queue, ^{
   
    [NSThread sleepForTimeInterval:1]; // 模拟耗时操作
    NSLog(@"task4 -- %@", [NSThread currentThread]);
});
    
NSLog(@"-- end --");

运行后查看打印信息:

2019-09-22 01:09:31.383838+0800 GCDSummary[33672:1003194] -- start --
2019-09-22 01:09:31.384070+0800 GCDSummary[33672:1003194] -- end --
2019-09-22 01:09:32.388449+0800 GCDSummary[33672
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值