Dispatch_barrier_async(线程同步)

Dispatch_barrier允许在并发队列中创建一个同步点,当并发队列中遇到一个dispatch_barrier时,会延时执行该dispatch_barrier,等待在dispatch_barrier之前提交的任务block执行完之后才开始执行,之后,并发队列继续执行后续block任务。

Dispatch_barrier_async(线程同步)_第1张图片

上图说明:

在添加到队列的任务1,2,3执行完毕后,然后才执行barrier,barrier执行完之后,才执行任务4,5。

看一段代码和执行的打印结果:

Dispatch_barrier_async(线程同步)_第2张图片
Dispatch_barrier_async
打印结果1

注意这里指定给barrier添加的并发队列应该是自己通过dispatch_queue_create函数创建的,如果传的是一个串行队列或者全局并发队列,那此时dispatch_barrier等同于Dispatch_async。

看下面两段代码执行之后的打印结果就一目了然啦:

Dispatch_barrier_async(线程同步)_第3张图片
通过dispatch_queue_create函数创建
Dispatch_barrier_async(线程同步)_第4张图片
通过并发队列创建

你可能感兴趣的:(Dispatch_barrier_async(线程同步))