美文网首页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