`

GCD - Dispatch Barrier

 
阅读更多

 

先看代码

dispatch_queue_t queue = dispatch_queue_create("xx", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(queue, ^{
        NSLog(@"1");
    });
    dispatch_async(queue, ^{
        NSLog(@"2");
    });
    dispatch_async(queue, ^{
        NSLog(@"3");
    });
    dispatch_async(queue, ^{
        NSLog(@"4");
    });
    dispatch_barrier_async(queue, ^{
        NSLog(@"我一定第5执行");
    });
    dispatch_async(queue, ^{
        NSLog(@"6");
    });
    dispatch_async(queue, ^{
        NSLog(@"7");
    });

 dispatch_barrier_async是一个屏障,能保证自己一定在那个位置执行,但是有一个问题,在global queue中测试失败。使用不等待执行处理的队列加dispatch_barrier_async可实现高效的数据库访问和文件访问。

执行结果

2014-01-01 00:31:31.626 GCDDemo[2319:3703] 4
2014-01-01 00:31:31.626 GCDDemo[2319:330b] 2
2014-01-01 00:31:31.626 GCDDemo[2319:1303] 1
2014-01-01 00:31:31.626 GCDDemo[2319:3603] 3
2014-01-01 00:31:31.630 GCDDemo[2319:3603] 我一定第5执行
2014-01-01 00:31:31.630 GCDDemo[2319:1303] 7
2014-01-01 00:31:31.630 GCDDemo[2319:3603] 6

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics