有多個線程的任務(wù),我們希望他們能依次訪問某一資源或者執(zhí)行某一操作手报,可以使用barrier浩销。典型的應(yīng)用是多個線程向NSMutableArry中添加數(shù)據(jù)(NSMutableArry不是線程安全的)前硫。
1、barrier 的典型應(yīng)用:
// 創(chuàng)建自定義并發(fā)隊(duì)列
dispatch_queue_t queue = dispatch_queue_create("que", DISPATCH_QUEUE_CONCURRENT);
for (int i = 0; i < 10; i++) {
// 開啟多個異步操作(將在多個線程執(zhí)行)
dispatch_async(queue, ^{
// 這里執(zhí)行耗時操作 ①
// 這里使用barrier異步操作
dispatch_barrier_async(queue, ^{
// 這里的操作會最后在一個線程里單獨(dú)順序執(zhí)行 ③
});
// 這里執(zhí)行耗時操作 ②
});
}
當(dāng)代碼執(zhí)行到barrier的代碼塊的時候捧书,這個代碼塊會被保留到所有的barrier
注意:
1吹泡、barrier里面的代碼,會等到所有的操作都執(zhí)行到barrier的時候经瓷,在一個單獨(dú)的線程內(nèi)順序執(zhí)行爆哑。
2、只在自定義并發(fā)隊(duì)列里有效舆吮,全局并發(fā)隊(duì)列內(nèi)無效揭朝。