void dispatch_barrier_async ( dispatch_queue_t queue, dispatch_block_t block );
參數(shù)
queue: 將barrier添加到那個(gè)隊(duì)列
block: barrier block 代碼塊
下面內(nèi)容翻譯自官方文檔
一個(gè)dispatch barrier 允許在一個(gè)并發(fā)隊(duì)列中創(chuàng)建一個(gè)同步點(diǎn)。當(dāng)在并發(fā)隊(duì)列中遇到一個(gè)barrier, 他會(huì)延遲執(zhí)行barrier的block,等待所有在barrier之前提交的blocks執(zhí)行結(jié)束。 這時(shí),barrier block自己開(kāi)始執(zhí)行。 之后, 隊(duì)列繼續(xù)正常的執(zhí)行操作。
調(diào)用這個(gè)函數(shù)總是在barrier block被提交之后立即返回,不會(huì)等到block被執(zhí)行。當(dāng)barrier block到并發(fā)隊(duì)列的最前端,他不會(huì)立即執(zhí)行。相反,隊(duì)列會(huì)等到所有當(dāng)前正在執(zhí)行的blocks結(jié)束執(zhí)行。到這時(shí),barrier才開(kāi)始自己執(zhí)行。所有在barrier block之后提交的blocks會(huì)等到barrier block結(jié)束之后才執(zhí)行。
這里指定的并發(fā)隊(duì)列應(yīng)該是自己通過(guò)dispatch_queue_create函數(shù)創(chuàng)建的。如果你傳的是一個(gè)串行隊(duì)列或者全局并發(fā)隊(duì)列,這個(gè)函數(shù)等同于dispatch_async函數(shù)。