美文网首页
GCD--dispatch_barrier

GCD--dispatch_barrier

作者: 初灬终 | 来源:发表于2018-12-01 21:11 被阅读2次

讨论下

dispatch_barrier_sync  `Submits a barrier block object for execution and waits until that block completes.`
dispatch_barrier_async `Submits a barrier block for asynchronous execution and returns immediately.`

dispatch_barrier_sync

    NSLog(@"start");
    dispatch_queue_t queue = dispatch_queue_create("queue", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(queue, ^{
        for (int i=0; i<3; i++) {
            sleep(1);
            NSLog(@"%@---i = %d",[NSThread currentThread], i);
        }
    });
    dispatch_async(queue, ^{
        for (int i=0; i<3; i++) {
            sleep(1);
            NSLog(@"%@---j = %d",[NSThread currentThread], i);
        }
    });
    dispatch_barrier_sync(queue, ^{
        for (int i=0; i<3; i++) {
            sleep(1);
            NSLog(@"%@dispatch_barrier_sync-k = %d",[NSThread currentThread], i);
        }
    });
    NSLog(@"mainQueue");
    dispatch_async(queue, ^{
        for (int i=0; i<3; i++) {
            sleep(1);
            NSLog(@"%@---m = %d",[NSThread currentThread], i);
        }
    });
    dispatch_async(queue, ^{
        for (int i=0; i<3; i++) {
            sleep(1);
            NSLog(@"%@---n = %d",[NSThread currentThread], i);
        }
    });

结果输出

2018-12-01 22:36:45.434258+0800 dispatch_barrier-Demo[49756:2281229] start
2018-12-01 22:36:46.435504+0800 dispatch_barrier-Demo[49756:2281280] <NSThread: 0x604000465300>{number = 4, name = (null)}---j = 0
2018-12-01 22:36:46.435535+0800 dispatch_barrier-Demo[49756:2281279] <NSThread: 0x60000026b9c0>{number = 3, name = (null)}---i = 0
2018-12-01 22:36:47.436364+0800 dispatch_barrier-Demo[49756:2281280] <NSThread: 0x604000465300>{number = 4, name = (null)}---j = 1
2018-12-01 22:36:47.436378+0800 dispatch_barrier-Demo[49756:2281279] <NSThread: 0x60000026b9c0>{number = 3, name = (null)}---i = 1
2018-12-01 22:36:48.437197+0800 dispatch_barrier-Demo[49756:2281280] <NSThread: 0x604000465300>{number = 4, name = (null)}---j = 2
2018-12-01 22:36:48.437197+0800 dispatch_barrier-Demo[49756:2281279] <NSThread: 0x60000026b9c0>{number = 3, name = (null)}---i = 2
2018-12-01 22:36:49.438991+0800 dispatch_barrier-Demo[49756:2281229] <NSThread: 0x60400006fb80>{number = 1, name = main}dispatch_barrier_sync-k = 0
2018-12-01 22:36:50.440638+0800 dispatch_barrier-Demo[49756:2281229] <NSThread: 0x60400006fb80>{number = 1, name = main}dispatch_barrier_sync-k = 1
2018-12-01 22:36:51.441571+0800 dispatch_barrier-Demo[49756:2281229] <NSThread: 0x60400006fb80>{number = 1, name = main}dispatch_barrier_sync-k = 2
2018-12-01 22:36:51.441938+0800 dispatch_barrier-Demo[49756:2281229] mainQueue
2018-12-01 22:36:52.446690+0800 dispatch_barrier-Demo[49756:2281280] <NSThread: 0x604000465300>{number = 4, name = (null)}---n = 0
2018-12-01 22:36:52.446690+0800 dispatch_barrier-Demo[49756:2281279] <NSThread: 0x60000026b9c0>{number = 3, name = (null)}---m = 0
2018-12-01 22:36:53.448285+0800 dispatch_barrier-Demo[49756:2281280] <NSThread: 0x604000465300>{number = 4, name = (null)}---n = 1
2018-12-01 22:36:53.448285+0800 dispatch_barrier-Demo[49756:2281279] <NSThread: 0x60000026b9c0>{number = 3, name = (null)}---m = 1
2018-12-01 22:36:54.452850+0800 dispatch_barrier-Demo[49756:2281280] <NSThread: 0x604000465300>{number = 4, name = (null)}---n = 2
2018-12-01 22:36:54.452852+0800 dispatch_barrier-Demo[49756:2281279] <NSThread: 0x60000026b9c0>{number = 3, name = (null)}---m = 2

很明显,这个dispatch_group有异曲同工之妙

dispatch_barrier_async

    NSLog(@"start");
    dispatch_queue_t queue = dispatch_queue_create("queue", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(queue, ^{
        for (int i=0; i<3; i++) {
            sleep(1);
            NSLog(@"%@---i = %d",[NSThread currentThread], i);
        }
    });
    dispatch_async(queue, ^{
        for (int i=0; i<3; i++) {
            sleep(1);
            NSLog(@"%@---j = %d",[NSThread currentThread], i);
        }
    });
    dispatch_barrier_async(queue, ^{
        for (int i=0; i<3; i++) {
            sleep(1);
            NSLog(@"%@dispatch_barrier_async-k = %d",[NSThread currentThread], i);
        }
    });
    NSLog(@"mainQueue");
    dispatch_async(queue, ^{
        for (int i=0; i<3; i++) {
            sleep(1);
            NSLog(@"%@---m = %d",[NSThread currentThread], i);
        }
    });
    dispatch_async(queue, ^{
        for (int i=0; i<3; i++) {
            sleep(1);
            NSLog(@"%@---n = %d",[NSThread currentThread], i);
        }
    });

结果输出

2018-12-01 22:39:59.571218+0800 dispatch_barrier-Demo[49821:2286672] start
2018-12-01 22:39:59.571634+0800 dispatch_barrier-Demo[49821:2286672] mainQueue
2018-12-01 22:40:00.576732+0800 dispatch_barrier-Demo[49821:2286715] <NSThread: 0x60400027c0c0>{number = 4, name = (null)}---i = 0
2018-12-01 22:40:00.576753+0800 dispatch_barrier-Demo[49821:2286714] <NSThread: 0x6000004799c0>{number = 3, name = (null)}---j = 0
2018-12-01 22:40:01.581673+0800 dispatch_barrier-Demo[49821:2286715] <NSThread: 0x60400027c0c0>{number = 4, name = (null)}---i = 1
2018-12-01 22:40:01.581680+0800 dispatch_barrier-Demo[49821:2286714] <NSThread: 0x6000004799c0>{number = 3, name = (null)}---j = 1
2018-12-01 22:40:02.582256+0800 dispatch_barrier-Demo[49821:2286714] <NSThread: 0x6000004799c0>{number = 3, name = (null)}---j = 2
2018-12-01 22:40:02.582256+0800 dispatch_barrier-Demo[49821:2286715] <NSThread: 0x60400027c0c0>{number = 4, name = (null)}---i = 2
2018-12-01 22:40:03.585238+0800 dispatch_barrier-Demo[49821:2286714] <NSThread: 0x6000004799c0>{number = 3, name = (null)}dispatch_barrier_async-k = 0
2018-12-01 22:40:04.588562+0800 dispatch_barrier-Demo[49821:2286714] <NSThread: 0x6000004799c0>{number = 3, name = (null)}dispatch_barrier_async-k = 1
2018-12-01 22:40:05.593231+0800 dispatch_barrier-Demo[49821:2286714] <NSThread: 0x6000004799c0>{number = 3, name = (null)}dispatch_barrier_async-k = 2
2018-12-01 22:40:06.598600+0800 dispatch_barrier-Demo[49821:2286714] <NSThread: 0x6000004799c0>{number = 3, name = (null)}---m = 0
2018-12-01 22:40:06.598617+0800 dispatch_barrier-Demo[49821:2286715] <NSThread: 0x60400027c0c0>{number = 4, name = (null)}---n = 0
2018-12-01 22:40:07.600451+0800 dispatch_barrier-Demo[49821:2286714] <NSThread: 0x6000004799c0>{number = 3, name = (null)}---m = 1
2018-12-01 22:40:07.600451+0800 dispatch_barrier-Demo[49821:2286715] <NSThread: 0x60400027c0c0>{number = 4, name = (null)}---n = 1
2018-12-01 22:40:08.605899+0800 dispatch_barrier-Demo[49821:2286715] <NSThread: 0x60400027c0c0>{number = 4, name = (null)}---n = 2
2018-12-01 22:40:08.605901+0800 dispatch_barrier-Demo[49821:2286714] <NSThread: 0x6000004799c0>{number = 3, name = (null)}---m = 2

相关文章

  • GCD--dispatch_barrier

    讨论下 dispatch_barrier_sync 结果输出 很明显,这个dispatch_group有异曲同工之...

网友评论

      本文标题:GCD--dispatch_barrier

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