GCD之barrier
1.在并行队列执行任务中,如果想让某一个任务先执行完后再执行其后面的任务,此时可以用dispatch_barrier_async,下图是dispatch_barrier_async函数的处理流程。

2.下面用代码体检一下
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
dispatch_queue_t queue=dispatch_queue_create("test", DISPATCH_QUEUE_CONCURRENT); dispatch_apply(5, queue, ^(size_t index) { NSLog(@"%ld",index); }); dispatch_async(queue, ^{ NSLog(@"a"); });// dispatch_barrier_async(queue, ^{// NSLog(@"a");// }); dispatch_apply(5, queue, ^(size_t index) { NSLog(@"%ld 1",index); }); |
3.当不采用dispatch_barrier_async时,输出结果如下:

4.当采用dispatch_barrier_async时,输出结果如下:

5.总结
可以看到输出结果的不同,当不采用时a输出可以在它自身任务的后面,采用时也不会出现这样的情况。所以能说明是在并行队列中添加该函数,则会在它前面的block执行完毕后再执行它,而它后面的则在它执行完再执行。

浙公网安备 33010602011771号