dispatch_group和dispatch_barrier的用法

前天被人問到使用GCD做依賴的用法,結(jié)果完全答不上來,下來之后就搜索了一下GCD的高級(jí)用法,發(fā)現(xiàn)自己對(duì)于GCD的掌握還很淺,像dispatch_groupdispatch_barrier的用法居然都不知道。
dispatch_group就是用來解決依賴問題的,或者說是用來解決并發(fā)序列的順序執(zhí)行問題。主要有幾個(gè)方法,分別是:

dispatch_group_t dispatch_group_create(void);
void dispatch_group_enter(dispatch_group_t group);
void dispatch_group_leave(dispatch_group_t group);
long dispatch_group_wait(dispatch_group_t group, dispatch_time_t timeout);
void dispatch_group_notify(dispatch_group_t group,
   dispatch_queue_t queue,
   dispatch_block_t block);

需要注意的就是,要先進(jìn)入group,然后在調(diào)用notify,否則可能會(huì)導(dǎo)致直接調(diào)用了notify回調(diào)。

dispatch_barrier主要還是用于加鎖,它主要用于有并發(fā)讀寫的需求時(shí),正常使用dispatch_sync(dispatch_async)執(zhí)行讀操作,在執(zhí)行寫操作時(shí),使用dispatch_barrier_sync(dispatch_barrier_async),等于對(duì)寫操作了添加了互斥鎖,可以避免多線程同時(shí)執(zhí)行寫操作。這樣做可以執(zhí)行并發(fā)讀操作,同時(shí)有互斥的執(zhí)行寫操作,相比全部添加互斥鎖提高了訪問性能。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容