多线程——barrier异步

原创 2015年11月21日 00:36:52
  • 主要用于在多个异步操作完成之后,统一对非线程安全的对象进行更新,适合于大规模的 I/O 操作
  • 由于 NSMutableArray 是非线程安全的,如果出现两个线程在同一时间向数组中添加对象,会出现程序崩溃的情况
  • 使用 dispatch_barrier_async 添加的 block 会在之前添加的 block 全部运行结束之后,才在同一个线程顺序执行,从而保证对非线程安全的对象进行正确的操作!

模拟加载图片


- (void)loadPic:(NSInteger)index{
    dispatch_async(_queue, ^{
        NSLog(@"下载第%zd张图片,%@",index,[NSThread currentThread]);
        // 加载index指定的图片
        // 获得图片名字
        NSString *imageName = [NSString stringWithFormat:@"%zd.jpg",index];
        // 获得图片的全路径
        NSString *filePath = [[NSBundle mainBundle] pathForResource:imageName ofType:nil];
        // 加载图片
        UIImage *image = [UIImage imageWithContentsOfFile:filePath];
//         NSLog(@"添加图片到数组中====%@",[NSThread currentThread]);
//         [self.images addObject:image];
        dispatch_barrier_async(_queue, ^{
            NSLog(@"添加图片到数组中====%@",[NSThread currentThread]);
            // 将图片添加到数组中
            // NSMutableArray不是线程安全的类,如果同一时间多个线程同时添加元素到数组中,就会出现场问题。
            [self.images addObject:image];
        });
    });
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

刀哥多线程Barrier异步gcd-08-barrier_async

Barrier 异步 主要用于在多个异步操作完成之后,统一对非线程安全的对象进行更新 适合于大规模的 I/O 操作 代码演练 准备工作 @interface ViewController () { ...

iOS 多线程: dispatch_barrier_async

该篇是 「iOS 多线程」系列的第三篇.前面两篇可以戳击下面的链接.iOS 多线程: 正确认识 GCD 队列类型 iOS多线程: 信号量该系列博客是为了记录和分享自己关于 iOS 多线程的一些认识,...

多线程知识巩固(七)dispatch_barrier_async

首先解释下标题里地括号是什么意思,GCD有个函数叫dispatch_barrier_async,还有个函数叫dispatch_barrier_sync,这个括号只是用来防止标题取得太长…>_ 对...
  • Erice_e
  • Erice_e
  • 2017年06月01日 23:08
  • 121

多线程 - dispatch_barrier_async 使用及解析

dispatch_barrier_async(myConcurrentQueue, ^{ // 等1.2都执行完便会执行此方法,此时便会将线程延迟直至barrier执行完毕方可 NS...

java多线程学习-java.util.concurrent详解(一) Latch/Barrier

Java1.5提供了一个非常高效实用的多线程包:java.util.concurrent, 提供了大量高级工具,可以帮助开发者编写高效、易维护、结构清晰的Java多线程程序。从这篇blog起,我将跟大...

Android进阶——多线程系列之异步任务AsyncTask的使用与源码分析

基于API24的AsyncTask使用与源码分析 AsyncTask是什么 AsyncTask是一种轻量级的异步任务类,它可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程并主...

多线程开发之NSOperation&NSOperationQueue——异步下载图片

原文网址:http://blog.csdn.net/m_changgong/article/details/8238093 作者:张燕广 实现的功能:1)演示多线程NSOperation&N...
  • chowpan
  • chowpan
  • 2013年01月05日 16:58
  • 795

多线程设计模式——Half-sync/Half-async(半同步/半异步)模式

Half-sync/Half-async(半同步/半异步)模式
  • buyoufa
  • buyoufa
  • 2016年07月15日 07:59
  • 422

Android进阶——多线程和异步任务小结

引言众所周知,无论是在任何的程序语言和操作系统中。多线程、多进程和异步同步始终都是经久不衰的话题。当然在我们实际的Android项目需求中也是如此,很多的业务需求都通过多线程及异步任务以便用户能够在使...

JAVA学习——java多线程的同步和异步

JAVA学习——java多线程的同步和异步
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多线程——barrier异步
举报原因:
原因补充:

(最多只允许输入30个字)