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多读单写

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