直接看代码
dispatch_barrier_sync的使用
看一下输出结果:
我们可以看到:
Task1,2,3不是顺序执行的因为是异步,但是都在barrier的前面,Task4,5在barrier的后面执行。
aa和bb都在主线程进行输出。
执行完barrier,才会将后面的任务4,5插入到队列执行。
dispatch_barrier_async
测试代码:
测试结果:
大家可以看到:
Task1,2,3不是顺序执行的因为是异步,但是都在barrier的前面,Task4,5在barrier的后面执行。
aa和bb都在主线程进行输出。
不用执行完barrier,就可以将任务4,5插入到队列中,但是仍然需要执行完barrier,才会执行任务4和5。
总结
你也可以这么理解,它们二者的差别在于插入barrier后面任务的时机不同。后面任务执行顺序都要在barrier之后,这一点是相同的。
- 相同点
等待在它前面插入队列的任务先执行完
等待他们自己的任务执行完再执行后面的任务
- 不同点
dispatch_barrier_sync将自己的任务插入到队列的时候,需要等待自己的任务结束之后才会继续插入被写在它后面的任务,然后执行它们。
dispatch_barrier_async将自己的任务插入到队列之后,不会等待自己的任务结束,它会继续把后面的任务插入到队列,然后等待自己的任务结束后才执行后面任务。