美文网首页iOS开发iOS Developer
dispatch_group和dispatch_barrier的

dispatch_group和dispatch_barrier的

作者: 移动开发_ziank | 来源:发表于2017-09-04 09:47 被阅读402次

前天被人问到使用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),等于对写操作了添加了互斥锁,可以避免多线程同时执行写操作。这样做可以执行并发读操作,同时有互斥的执行写操作,相比全部添加互斥锁提高了访问性能。

相关文章

网友评论

    本文标题:dispatch_group和dispatch_barrier的

    本文链接:https://www.haomeiwen.com/subject/uxisjxtx.html