美文网首页iOS 多线程
多线程中栅栏函数

多线程中栅栏函数

作者: 奔哥小木屋 | 来源:发表于2016-05-07 00:33 被阅读1290次
  • 在撸代码的过程中,遇到一个小小的纠结的地方,有关于栅栏函数的,花费一个小时查了文档,记录下来
//GCD是基于C的,所有barrier是函数 
//GCD中的barrier函数有两种形式
//第一种  实质上还是异步函数
dispatch_barrier_async(dispatch_queue_t queue, dispatch_block_t block);

//第二种  实质上还是同步函数
dispatch_barrier_sync(dispatch_queue_t queue, dispatch_block_t block);

  • 在barrier实际的用途中,有几个注意点:
//无论barrier函数的async还是sync,文档中都是要求和自定义的并发队列配合使用
/* @discussion
 * Submits a function to a dispatch queue like dispatch_async_f(), but marks
 * that function as a barrier (relevant only on DISPATCH_QUEUE_CONCURRENT
 * queues).
 */
  • dispatch_barrier_async(dispatch_queue_t queue, dispatch_block_t block) //异步

    • 与dispatch_get_global_queue(0, 0);(全局并发队列)一起使用,达不到栅栏的效果,官方文档有说;
    • 与dispatch_get_main_queue()(主队列)一起使用,barrier前后任务串行执行,都在UI线程执行
    • 与dispatch_queue_create(NULL, DISPATCH_QUEUE_SERIAL)(串行队列)一起使用,会创建一个线程,barrier前后的任务串行执行
    • 与dispatch_queue_create(NULL, DISPATCH_QUEUE_CONCURRENT)(自定义并发队列)一起使用,创建多个线程,barrier前后的任务都是并行执行.
  • dispatch_barrier_sync(dispatch_queue_t queue, dispatch_block_t block) //同步

    • 与dispatch_get_global_queue(0, 0);(全局并发队列)一起使用,达不到栅栏的效果,官方文档有说;
    • 与dispatch_get_main_queue()(主队列)一起使用,程序会进入死锁状态!!!!!!!!(这个很容易忽略)
    • 与dispatch_queue_create(NULL, DISPATCH_QUEUE_SERIAL)(串行队列)一起使用,barrier在UI线程运行
    • 与dispatch_queue_create(NULL, DISPATCH_QUEUE_CONCURRENT)(自定义并发队列)一起使用,barrier在UI线程运行
  • 所以, ,barrier函数一般都会用异步的,省心,不担心死锁.

相关文章

  • 多线程中栅栏函数

    在撸代码的过程中,遇到一个小小的纠结的地方,有关于栅栏函数的,花费一个小时查了文档,记录下来 在barrier实际...

  • iOS多线程 - GCD中的栅栏函数

    一、什么是栅栏函数 dispatch_barrier_async函数,在进程管理中起到一个栅栏的作用,它等待所有位...

  • iOS 栅栏函数学习

    作用很形象的类似于栅栏,栅栏前面的任务完成之后接着执行栅栏函数中添加的任务,最后执行栅栏后面的任务; 栅栏函数只有...

  • GCD的栅栏函数的原理及使用

    什么是栅栏函数 在GCD中的栅栏函数有dispatch_barrier_async(异步)和dispatch_ba...

  • GCD栅栏函数, 快速迭代和调度组的使用

    今天介绍几个比较重要的GCD函数: GCD栅栏函数: 同步栅栏函数: 会发生阻塞 异步栅栏函数: 不会发生阻塞 栅...

  • 栅栏函数

    GCD中有两个用来执行任务的常用函数 用同步方法执行任务,其中 queue 是队列,block 是任务 dispa...

  • 栅栏函数

    需要用自定义并发队列 dispatch_barrier_sync(queue,void(^block)())会将q...

  • 多线程之GCD栅栏函数,GCD快速迭代,队列组

    1. GCD栅栏函数 作用:只有当栅栏函数执行完毕后才能执行后面的函数 需求:使用栅栏函数规定线程执行顺序 注意点...

  • iOS多线程梳理-GCD(3)

    上一篇 iOS多线程梳理-GCD死锁 GCD栅栏函数 仅在自己创建的并发队列上有效,在全局(Global)并发队列...

  • GCD的栅栏函数

    作用:只有当栅栏函数执行完毕后才能执行后面的函数 需求:使用栅栏函数规定线程执行顺序 注意点:栅栏函数不能使用全局...

网友评论

本文标题:多线程中栅栏函数

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