美文网首页FlutteriOS开发iOS 开发大全
面试题之dispatch_barrier_async

面试题之dispatch_barrier_async

作者: alvin_ding | 来源:发表于2015-08-05 10:58 被阅读5839次
void dispatch_barrier_async ( dispatch_queue_t queue, dispatch_block_t block );

参数

queue: 将barrier添加到那个队列
block: barrier block 代码块

下面内容翻译自官方文档

一个dispatch barrier 允许在一个并发队列中创建一个同步点。当在并发队列中遇到一个barrier, 他会延迟执行barrier的block,等待所有在barrier之前提交的blocks执行结束。 这时,barrier block自己开始执行。 之后, 队列继续正常的执行操作。

调用这个函数总是在barrier block被提交之后立即返回,不会等到block被执行。当barrier block到并发队列的最前端,他不会立即执行。相反,队列会等到所有当前正在执行的blocks结束执行。到这时,barrier才开始自己执行。所有在barrier block之后提交的blocks会等到barrier block结束之后才执行。

这里指定的并发队列应该是自己通过dispatch_queue_create函数创建的。如果你传的是一个串行队列或者全局并发队列,这个函数等同于dispatch_async函数。

相关文章

网友评论

  • 大号鱼骨头:今天刚好遇到这个,我还在奇怪怎么和文档上说的不一致,原来是传递的队列是全局的并发队列,换成create的并发队列就OK了。
    吃蘑菇De大灰狼:@一一闪闪亮京京 恩恩,相当于一个异步队列
    一一闪闪亮京京:@MichaelMao 文档中写的很清楚
    * When submitted to a a global queue or to a queue not created with the
    * DISPATCH_QUEUE_CONCURRENT attribute, barrier blocks behave identically to
    * blocks submitted with the dispatch_async()/dispatch_sync() API.
    吃蘑菇De大灰狼:@大号鱼骨头 为啥全局并发队列barrie就失效呢?

本文标题:面试题之dispatch_barrier_async

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