一個(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自己開始執(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才開始自己執(zhí)行。所有在barrier block之后提交的blocks會(huì)等到barrier block結(jié)束之后才執(zhí)行胯陋。
這里指定的并發(fā)隊(duì)列應(yīng)該是自己通過dispatch_queue_create函數(shù)創(chuàng)建的蕊温。如果你傳的是一個(gè)串行隊(duì)列或者全局并發(fā)隊(duì)列,這個(gè)函數(shù)等同于dispatch_async函數(shù)遏乔。