美文网首页iOS开发专区
iOS深入理解GCD 第四篇(dispatch_barrier_

iOS深入理解GCD 第四篇(dispatch_barrier_

作者: 镜花水月cy | 来源:发表于2017-09-08 16:05 被阅读43次

本文摘自http://www.cnblogs.com/ziyi--caolu/p/4900650.html

在访问数据库或者文件的时候,我们可以使用dispatch_barrier_async避免数据竞争问题,代码如下:

#import <Foundation/Foundation.h>
 
@interface ZYPerson : NSObject
@property (nonatomic, copy) NSString *name;
@end
 
 
#import "ZYPerson.h"
 
@interface ZYPerson ()
@end
 
static NSString *_name;
static dispatch_queue_t _concurrentQueue;
@implementation ZYPerson
- (instancetype)init
{
    if (self = [super init]) {
       _concurrentQueue = dispatch_queue_create("com.person.syncQueue", DISPATCH_QUEUE_CONCURRENT);
    }
    return self;
}
- (void)setName:(NSString *)name
{
    dispatch_barrier_async(_concurrentQueue, ^{
        _name = [name copy];
    });
}
- (NSString *)name
{
    __block NSString *tempName;
    dispatch_sync(_concurrentQueue, ^{
        tempName = _name;
    });
    return tempName;
}
@end

需求:多个getter方法(也就是读取)是可以并发执行的,而getter(读)与setter(写)方法是不能并发执行的。

在队列中,barrier块必须单独执行,不能与其他block并行。这只对并发队列有意义,并发队列如果发现接下来要执行的block是个barrier block,那么就一直要等到当前所有并发的block都执行完毕,才会单独执行这个barrier block代码块,等到这个barrier block执行完毕,再继续正常处理其他并发block。

因此在上面的代码中,setter方法中使用了barrier block以后,对象的读取操作依然是可以并发执行的,但是写入操作就必须单独执行了

附上一个链接 http://www.jianshu.com/p/9ed95082f256 dispatch_barrier_sync和dispatch_barrier_async的对比

相关文章

  • (链接)GCD

    一 通过GCD中的dispatch_barrier_(a)sync所谓等待的理解 二 iOS-GCD之初,disP...

  • iOS深入理解GCD 第四篇(dispatch_barrier_

    本文摘自http://www.cnblogs.com/ziyi--caolu/p/4900650.html 在访问...

  • 1.多线程编程

    参考:Objective-C高级编程 深入浅出 iOS 并发编程 GCD 深入理解:第一部分 GCD 深入理解:第...

  • 线程安全2

    【iOS】线程安全的文件读写 通过GCD中的dispatch_barrier_(a)sync加强对sync中所谓等...

  • 理解GCD

    (1)博客:深入理解GCD 理解iOS中的线程池 多线程理解 ?:(1)信号量--...

  • 2016.9第二周

    博客深入理解 GCD - IOS - 伯乐在线(iOS)模仿斗鱼的部分界面介绍一(部分使用RxSwiftzen/m...

  • OC-多线程GCD

    参考:GCD源码深入理解 GCDiOS多线程--彻底学会多线程之『GCD』关于iOS多线程,我说,你听,没准你就懂...

  • GCD相关知识点

    GCD相关知识点 多线程技术--GCD 深入学习GCD GCD 深入理解:第一部分 GCD 深入理解:第二部分 1...

  • iOS - GCD 深入理解

    如需转载,请注明出处,尊重他人劳动,谢谢 GCD:Grand Central Dispatch (GCD)是App...

  • iOS 多线程

    iOS 多线程 GCD 深入理解:第一部分 作者:Derek SelanderGCD 深入理解:第二部分 作者:D...

网友评论

    本文标题:iOS深入理解GCD 第四篇(dispatch_barrier_

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