zoukankan      html  css  js  c++  java
  • GCD实现多读单写

    #import "WHObject.h"
    
    @interface WHObject()
    
    @property (nonatomic, strong) dispatch_queue_t dictQueue;//并发队列
    @property (nonatomic, strong) NSMutableDictionary *dict;//可变字典
    
    @end
    
    @implementation WHObject
    
    - (instancetype)init {
        if(self = [super init]) {
            _dictQueue = dispatch_queue_create("com.huangwenhong.queue", DISPATCH_QUEUE_CONCURRENT);
            _dict = [NSMutableDictionary dictionary];
        }
        return self;
    }
    
    - (void)huangwenhongmethod {
        self.target = [NSObject new];
    }
    
    - (id)valueForKey:(NSString *)key {
        id __block obj;
        dispatch_sync(_dictQueue, ^{//因为有数据 return,所以这里是同步调用
            obj = [self.dict valueForKey:key];
        });
        return obj;
    }
    
    - (void)setObject:(id)obj forKey:(id<NSCopying>)key {
        //重点:dispatch_barrier_async(),异步栅栏调用;
        //只有提交到并行队列才有意义
        dispatch_barrier_async(_dictQueue, ^{
            [self.dict setObject:obj forKey:key];
        });
    }
    @end

    总结:首先栈栏函数的作用,是执行到当前位置,前面的全部任务都要等待,等待block内部任务执行完成后,继续执行其他任务。(面试时候的问题,用锁不知道能不能实现)

  • 相关阅读:
    CentOS7基础优化与常用配置
    MHA+binlogserver+VIP+sendreport 高可用架构
    GTID主从复制
    主从复制故障处理
    主从复制
    mysql 配置文件
    通用二进制安装mysql-5.7.28(无坑)
    css动画 文字闪烁效果
    cmd命令提示符大全(干货)
    JS实现手机摇一摇功能
  • 原文地址:https://www.cnblogs.com/coolcold/p/12430568.html
Copyright © 2011-2022 走看看