多线程——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];
        });
    });
}

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

C++线程 -- boost::barrier解决多线程分工问题

#include
  • lyq240919525
  • lyq240919525
  • 2014年07月12日 14:02
  • 2557

C#多线程同步(七)【Barrier】

人生是一场旅程。我们经历了几次轮回,才换来这个旅程。而这个旅程很短,因此不妨大胆一些,不妨大胆一些去爱一个人,去攀一座山,去追一个梦……有很多事我都不明白。但我相信一件事。上天让我们来到这个世上,就是...
  • WuLex
  • WuLex
  • 2017年01月05日 12:04
  • 524

线程同步之 barrier

任务是:有N个线程,每个
  • blueblood7
  • blueblood7
  • 2014年09月01日 11:23
  • 632

多线程学习总结(五)——实现多线程的方法之CyclicBarrier

声明:文章内容全都是自己的学习总结,如有不对的地方请大家帮忙指出。有需要沟通交流的可加我QQ群:425120333 这里说的其实已经不是怎么实现多线程了,而是关于多线程的应用了; 古时候,行军...
  • cqb18257344546
  • cqb18257344546
  • 2016年10月05日 17:08
  • 184

C# 并行编程 之 Barrier的使用 - 通过屏障同步并发任务

Barrier 是 .Net 提供的一直并发的机制,它允许多个任务同步他们不同阶段的并发工作。...
  • wangzhiyu1980
  • wangzhiyu1980
  • 2015年05月14日 09:28
  • 3243

理解 Memory barrier(内存屏障)

跳到内容 Name5566 分享我的所学所感 我的开源项目关于作者 理解 Memory barrier(内存屏障) 发布于 2014 年 04...
  • world_hello_100
  • world_hello_100
  • 2015年12月01日 16:43
  • 16153

Java多线程之CyclicBarrier

CyclicBarrier 一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相...
  • youzai24
  • youzai24
  • 2012年11月29日 14:42
  • 529

多线程Demo-CyclicBarrier

package Thread; import java.util.concurrent.CyclicBarrier; import java.util.concurrent.Executo...
  • kuyuyingzi
  • kuyuyingzi
  • 2015年02月06日 11:36
  • 407

Linux文件系统的barrier:启用还是禁用

大多数当前流行的Linux文件系统,包括EXT3和EXT4,都将文件系统barrier作为一个增强的安全特性。它保护数据不被写入日记。但 是,在许多情况下,我们并不清楚这些barrier是否有用。本文...
  • lidan3959
  • lidan3959
  • 2013年10月11日 15:29
  • 2084

Linux Barrier I/O 实现分析与barrier内存屏蔽 总结

一直以来,I/O顺序问题一直困扰着我。其实这个问题是一个比较综合的问题,它涉及的层次比较多,从VFS page cache到I/O调度算法,从i/o子系统到存储外设。而Linux I/O barr...
  • benpaobagzb
  • benpaobagzb
  • 2016年04月03日 15:45
  • 1677
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多线程——barrier异步
举报原因:
原因补充:

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