美文网首页
GCD-barrier

GCD-barrier

作者: labi3285 | 来源:发表于2017-09-14 23:09 被阅读23次

有多个线程的任务,我们希望他们能依次访问某一资源或者执行某一操作,可以使用barrier。典型的应用是多个线程向NSMutableArry中添加数据(NSMutableArry不是线程安全的)。

1、barrier 的典型应用:

// 创建自定义并发队列
dispatch_queue_t queue = dispatch_queue_create("que", DISPATCH_QUEUE_CONCURRENT);
for (int i = 0; i < 10; i++) {
    // 开启多个异步操作(将在多个线程执行)
    dispatch_async(queue, ^{
        // 这里执行耗时操作 ①
        // 这里使用barrier异步操作
        dispatch_barrier_async(queue, ^{
            // 这里的操作会最后在一个线程里单独顺序执行 ③
       });
       // 这里执行耗时操作 ② 
    });
}

当代码执行到barrier的代码块的时候,这个代码块会被保留到所有的barrier

注意:
1、barrier里面的代码,会等到所有的操作都执行到barrier的时候,在一个单独的线程内顺序执行。
2、只在自定义并发队列里有效,全局并发队列内无效。

相关文章

  • GCD-barrier

    有多个线程的任务,我们希望他们能依次访问某一资源或者执行某一操作,可以使用barrier。典型的应用是多个线程向N...

网友评论

      本文标题:GCD-barrier

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