iOS多读单写

作者: 大冯宇宙 | 来源:发表于2019-03-10 21:35 被阅读0次

在开发中,我们经常会用到针对一个数据存储的多读单写功能。dispatch_barrier_async就能实现该功能,保证你在读的过程中可以多并发,写的过程中可以阻塞其他操作。

@interface UserCenter()
{
    // 定义一个并发队列
    dispatch_queue_t concurrent_queue;
    
    // 用户数据中心, 可能多个线程需要数据访问
    NSMutableDictionary *userCenterDic;
}

@end

// 多读单写模型
@implementation UserCenter

- (id)init
{
    self = [super init];
    if (self) {
        // 通过宏定义 DISPATCH_QUEUE_CONCURRENT 创建一个并发队列
        concurrent_queue = dispatch_queue_create("read_write_queue", DISPATCH_QUEUE_CONCURRENT);
        // 创建数据容器
        userCenterDic = [NSMutableDictionary dictionary];
    }
    
    return self;
}

- (id)objectForKey:(NSString *)key
{
    __block id obj;
    // 同步读取指定数据
    dispatch_sync(concurrent_queue, ^{
        obj = [userCenterDic objectForKey:key];
    });
    
    return obj;
}

- (void)setObject:(id)obj forKey:(NSString *)key
{
    // 异步栅栏调用设置数据
    dispatch_barrier_async(concurrent_queue, ^{
        [userCenterDic setObject:obj forKey:key];
    });
}

相关文章

  • iOS多读单写

    在开发中,我们经常会用到针对一个数据存储的多读单写功能。dispatch_barrier_async就能实现该功能...

  • iOS多读单写

    https://www.jianshu.com/p/2d25ad26680d?utm_campaign=males...

  • iOS 多读单写,栅栏函数` dispatch_baarrier

    iOS 多读单写 以及栅栏函数讲解dispatch_barrier_async dispatch_barrier_...

  • iOS pthread_rwlock 实现多读单写

    iOS pthread_rwlock 实现多读单写 上面的代码用到了读写锁,读操作是共享的,可以多线程同时读取,写...

  • iOS-多线程-读写安全

    用dispatch_barrier_sync实现多读单写,用dispatch_semaphore实现单读单写

  • 多读单写

    多读单写的意思:可以多个读者同时读取数据,而在读数据的时候不能写入数据,并且在写的过程中,不能有其他读者去写,即读...

  • 【线程】线程安全-多读单写

    多读单写 理解多读单写: 一、采用dispatch_barrier实现; 总结 二、采用rwlock读写锁实现 示...

  • iOS 多线程面试题(dispatch_barrier_asyn

    dispatch_barrier_async 1、问:怎么用GCD实现多读单写? 多读单写的意思就是:可以多个读者...

  • iOS中的多读单写问题

    我们知道iOS中的数组和字典是线程不安全的。多线程编程中,当多个线程对同一个字典dictionary进行多读单写操...

  • iOS中的多读单写问题

    我们知道iOS中的数组和字典是线程不安全的。多线程编程中,当多个线程对同一个字典dictionary进行多读单写操...

网友评论

    本文标题:iOS多读单写

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