美文网首页
dispatch_barrier_(a)sync

dispatch_barrier_(a)sync

作者: Nulll | 来源:发表于2019-03-20 17:35 被阅读0次

在iOS中未来保存某些任务顺序的执行,需要使用dispatch_barrier 来执行。

dispatch_barrier 会让之前的代码先执行完毕;
然后在执行 dispatch_barrier 里面的代码;
之后在执行 dispatch_barrier 后面的代码;

dispatch_barrier_sync 同步执行;
dispatch_barrier_async 异步执行;

直接代码展示。

// 创建一个 queue
    dispatch_queue_t queue = dispatch_queue_create("dispatch_queuq", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(queue, ^{
       
        sleep(1);
        NSLog(@"test1");
    });
    NSLog(@"aaaaaa");
    dispatch_async(queue, ^{
        sleep(1);
        NSLog(@"test2");
    });
    dispatch_async(queue, ^{
        sleep(1);
        NSLog(@"test3");
    });
    NSLog(@"bbbbbb");
    
    dispatch_barrier_async(queue, ^{
        
        NSLog(@"000000");
        sleep(1);
        NSLog(@"111111");
        sleep(1);
        
        NSLog(@"test0");
    });
    
    dispatch_async(queue, ^{
        sleep(1);
        NSLog(@"test4");;
    });
    NSLog(@"cccccc");
    dispatch_async(queue, ^{
        sleep(1);
        NSLog(@"test5");
    });
    dispatch_async(queue, ^{
        sleep(1);
        NSLog(@"test6");
    });
    NSLog(@"dddddd");

结果为如下图片。


屏幕快照 2019-03-20 下午5.24.07.png
///将
    dispatch_barrier_async(queue, ^{
        
        NSLog(@"000000");
        sleep(1);
        NSLog(@"111111");
        sleep(1);
        
        NSLog(@"test0");
    });
/// 其实 dispatch_barrier_async 是异步执行方法。
///修改为
    dispatch_barrier_sync(queue, ^{
        
        NSLog(@"000000");
        sleep(1);
        NSLog(@"111111");
        sleep(1);
        
        NSLog(@"test0");
    });
/// 同步执行。

结果为:


屏幕快照 2019-03-20 下午5.24.55.png

相关文章

网友评论

      本文标题:dispatch_barrier_(a)sync

      本文链接:https://www.haomeiwen.com/subject/zketvqtx.html