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内部任务执行完成后,继续执行其他任务。(面试时候的问题,用锁不知道能不能实现)

  • 相关阅读:
    POJ 2636:Electrical Outlets
    POJ 2260:Error Correction
    POJ 2080:Calendar
    POJ 2017:Speed Limit
    POJ 1504:Adding Reversed Numbers
    POJ 1477:Box of Bricks
    POJ 1060:Modular multiplication of polynomials
    HDU 1379:DNA Sorting
    HDU 1009:FatMouse' Trade
    mysql修改初始密码
  • 原文地址:https://www.cnblogs.com/coolcold/p/12430568.html
Copyright © 2011-2022 走看看