前天被人問到使用GCD做依賴的用法,結(jié)果完全答不上來,下來之后就搜索了一下GCD的高級(jí)用法,發(fā)現(xiàn)自己對(duì)于GCD的掌握還很淺,像dispatch_group和dispatch_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í)行寫操作,相比全部添加互斥鎖提高了訪問性能。