dispatch_group和dispatch_barrier的用法

前天被人问到使用GCD做依赖的用法,结果完全答不上来,下来之后就搜索了一下GCD的高级用法,发现自己对于GCD的掌握还很浅,像dispatch_groupdispatch_barrier的用法居然都不知道。
dispatch_group就是用来解决依赖问题的,或者说是用来解决并发序列的顺序执行问题。主要有几个方法,分别是:

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);

需要注意的就是,要先进入group,然后在调用notify,否则可能会导致直接调用了notify回调。

dispatch_barrier主要还是用于加锁,它主要用于有并发读写的需求时,正常使用dispatch_sync(dispatch_async)执行读操作,在执行写操作时,使用dispatch_barrier_sync(dispatch_barrier_async),等于对写操作了添加了互斥锁,可以避免多线程同时执行写操作。这样做可以执行并发读操作,同时有互斥的执行写操作,相比全部添加互斥锁提高了访问性能。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容