dispatch_barrier_async(queue, bl

2017-08-25  本文已影响9人  2d899c5242bd
void concurrentQueueBarrier(){
    //1 创建并发队列
    dispatch_queue_t concurrentQueue = dispatch_queue_create("concurrentQueue", DISPATCH_QUEUE_CONCURRENT);
    
    //2 向队列中添加任务
    dispatch_async(concurrentQueue, ^{
        NSLog(@"任务1,%@",[NSThread currentThread]);
        for (int i = 0; i<10; i++) {
            NSLog(@"任务1,%d", i);
        }
    });
    dispatch_async(concurrentQueue, ^{
        NSLog(@"任务2,%@",[NSThread currentThread]);
        for (int i = 0; i<10; i++) {
            NSLog(@"任务2,%d", i);
        }
    });
    dispatch_async(concurrentQueue, ^{
        NSLog(@"任务3,%@",[NSThread currentThread]);
        for (int i = 0; i<10; i++) {
            NSLog(@"任务3,%d", i);
        }
    });
    dispatch_barrier_async(concurrentQueue, ^{
        NSLog(@"我是barrier");
        for (int i = 0; i<10; i++) {
            NSLog(@"我是barrier,%d", i);
        }
    });
    
    dispatch_async(concurrentQueue, ^{
        NSLog(@"任务4,%@",[NSThread currentThread]);
        for (int i = 0; i<10; i++) {
            NSLog(@"任务4,%d", i);
        }
    });
    dispatch_async(concurrentQueue, ^{
        NSLog(@"任务5,%@",[NSThread currentThread]);
        for (int i = 0; i<10; i++) {
            NSLog(@"任务5,%d", i);
        }
    });
}

输出结果

2017-08-25 20:26:26.661 SwizzingTest[11055:617229] 任务3,<NSThread: 0x600000064700>{number = 3, name = (null)}
2017-08-25 20:26:26.661 SwizzingTest[11055:617228] 任务2,<NSThread: 0x608000064600>{number = 2, name = (null)}
2017-08-25 20:26:26.661 SwizzingTest[11055:617229] 任务3,0
2017-08-25 20:26:26.661 SwizzingTest[11055:617228] 任务2,0
2017-08-25 20:26:26.662 SwizzingTest[11055:617229] 任务3,1
2017-08-25 20:26:26.662 SwizzingTest[11055:617228] 任务2,1
2017-08-25 20:26:26.662 SwizzingTest[11055:617229] 任务3,2
2017-08-25 20:26:26.662 SwizzingTest[11055:617228] 任务2,2
2017-08-25 20:26:26.662 SwizzingTest[11055:617229] 任务3,3
2017-08-25 20:26:26.662 SwizzingTest[11055:617227] 任务1,<NSThread: 0x610000067ec0>{number = 4, name = (null)}
2017-08-25 20:26:26.663 SwizzingTest[11055:617228] 任务2,3
2017-08-25 20:26:26.663 SwizzingTest[11055:617229] 任务3,4
2017-08-25 20:26:26.663 SwizzingTest[11055:617228] 任务2,4
2017-08-25 20:26:26.663 SwizzingTest[11055:617229] 任务3,5
2017-08-25 20:26:26.663 SwizzingTest[11055:617228] 任务2,5
2017-08-25 20:26:26.663 SwizzingTest[11055:617229] 任务3,6
2017-08-25 20:26:26.663 SwizzingTest[11055:617228] 任务2,6
2017-08-25 20:26:26.663 SwizzingTest[11055:617229] 任务3,7
2017-08-25 20:26:26.663 SwizzingTest[11055:617228] 任务2,7
2017-08-25 20:26:26.663 SwizzingTest[11055:617229] 任务3,8
2017-08-25 20:26:26.663 SwizzingTest[11055:617227] 任务1,0
2017-08-25 20:26:26.666 SwizzingTest[11055:617228] 任务2,8
2017-08-25 20:26:26.666 SwizzingTest[11055:617229] 任务3,9
2017-08-25 20:26:26.666 SwizzingTest[11055:617227] 任务1,1
2017-08-25 20:26:26.666 SwizzingTest[11055:617228] 任务2,9
2017-08-25 20:26:26.666 SwizzingTest[11055:617227] 任务1,2
2017-08-25 20:26:26.666 SwizzingTest[11055:617227] 任务1,3
2017-08-25 20:26:26.667 SwizzingTest[11055:617227] 任务1,4
2017-08-25 20:26:26.667 SwizzingTest[11055:617227] 任务1,5
2017-08-25 20:26:26.667 SwizzingTest[11055:617227] 任务1,6
2017-08-25 20:26:26.667 SwizzingTest[11055:617227] 任务1,7
2017-08-25 20:26:26.668 SwizzingTest[11055:617227] 任务1,8
2017-08-25 20:26:26.668 SwizzingTest[11055:617227] 任务1,9
2017-08-25 20:26:26.668 SwizzingTest[11055:617227] 我是barrier
2017-08-25 20:26:26.668 SwizzingTest[11055:617227] 我是barrier,0
2017-08-25 20:26:26.669 SwizzingTest[11055:617227] 我是barrier,1
2017-08-25 20:26:26.669 SwizzingTest[11055:617227] 我是barrier,2
2017-08-25 20:26:26.669 SwizzingTest[11055:617227] 我是barrier,3
2017-08-25 20:26:26.669 SwizzingTest[11055:617227] 我是barrier,4
2017-08-25 20:26:26.669 SwizzingTest[11055:617227] 我是barrier,5
2017-08-25 20:26:26.670 SwizzingTest[11055:617227] 我是barrier,6
2017-08-25 20:26:26.670 SwizzingTest[11055:617227] 我是barrier,7
2017-08-25 20:26:26.670 SwizzingTest[11055:617227] 我是barrier,8
2017-08-25 20:26:26.670 SwizzingTest[11055:617227] 我是barrier,9
2017-08-25 20:26:26.676 SwizzingTest[11055:617231] 任务5,<NSThread: 0x608000064b80>{number = 6, name = (null)}
2017-08-25 20:26:26.676 SwizzingTest[11055:617227] 任务4,<NSThread: 0x610000067ec0>{number = 4, name = (null)}
2017-08-25 20:26:26.676 SwizzingTest[11055:617231] 任务5,0
2017-08-25 20:26:26.676 SwizzingTest[11055:617227] 任务4,0
2017-08-25 20:26:26.676 SwizzingTest[11055:617231] 任务5,1
2017-08-25 20:26:26.677 SwizzingTest[11055:617227] 任务4,1
2017-08-25 20:26:26.677 SwizzingTest[11055:617231] 任务5,2
2017-08-25 20:26:26.677 SwizzingTest[11055:617227] 任务4,2
2017-08-25 20:26:26.677 SwizzingTest[11055:617231] 任务5,3
2017-08-25 20:26:26.677 SwizzingTest[11055:617227] 任务4,3
2017-08-25 20:26:26.677 SwizzingTest[11055:617231] 任务5,4
2017-08-25 20:26:26.677 SwizzingTest[11055:617227] 任务4,4
2017-08-25 20:26:26.677 SwizzingTest[11055:617231] 任务5,5
2017-08-25 20:26:26.677 SwizzingTest[11055:617227] 任务4,5
2017-08-25 20:26:26.677 SwizzingTest[11055:617231] 任务5,6
2017-08-25 20:26:26.677 SwizzingTest[11055:617227] 任务4,6
2017-08-25 20:26:26.677 SwizzingTest[11055:617231] 任务5,7
2017-08-25 20:26:26.678 SwizzingTest[11055:617227] 任务4,7
2017-08-25 20:26:26.678 SwizzingTest[11055:617231] 任务5,8
2017-08-25 20:26:26.678 SwizzingTest[11055:617227] 任务4,8
2017-08-25 20:26:26.678 SwizzingTest[11055:617231] 任务5,9
2017-08-25 20:26:26.678 SwizzingTest[11055:617227] 任务4,9

结论

1 barrier前添加的block 任务 ‘1,2,3’ 并发执行
2 barrier前添加的所有block任务执行完后,开始执行barrier block 任务
3 barrier block任务执行完后,并发执行任务‘4,5’

上一篇 下一篇

猜你喜欢

热点阅读