美文网首页
构建一个线程安全的字典

构建一个线程安全的字典

作者: Cocojiang | 来源:发表于2020-03-21 12:08 被阅读0次


线程安全锁字典ConcurrentDictionary(并发字典)

ConcurrentDictionary的写操作比使用锁的字典Dictionary要慢得多,而读操作要快一些。因此如果对字典需要大量的线程安全的读操作,ConcurrentDictionary性能比较好。

使用单线程时,并发字典ConcurrentDictionary性能不及Dictionary,但是扩展到5到6个线程,并发字典性能会更好。

如果自己设计 则要+队列+同步 这样才能保证线程安全。。

/**

线程安全的字典

/**

线程安全的字典

*/

@interface OSSSyncMutableDictionary : NSObject

@property (nonatomic, strong) NSMutableDictionary *dictionary;

@property (nonatomic, strong) dispatch_queue_t dispatchQueue;

- (id)objectForKey:(id)aKey;

- (NSArray *)allKeys;

- (void)setObject:(id)anObject forKey:(id <NSCopying>)aKey;

- (void)removeObjectForKey:(id)aKey;

@end

@implementation OSSSyncMutableDictionary

- (instancetype)init {

    if (self = [super init]) {

        _dictionary = [NSMutableDictionary new];

        _dispatchQueue = dispatch_queue_create("com.aliyun.aliyunsycmutabledictionary", DISPATCH_QUEUE_SERIAL);

    }

    return self;

}

- (NSArray *)allKeys {

    __block NSArray *allKeys = nil;

    dispatch_sync(self.dispatchQueue, ^{

        allKeys = [self.dictionary allKeys];

    });

    return allKeys;

}

- (id)objectForKey:(id)aKey {

    __block id returnObject = nil;

    dispatch_sync(self.dispatchQueue, ^{

        returnObject = [self.dictionary objectForKey:aKey];

    });

    return returnObject;

}

- (void)setObject:(id)anObject forKey:(id <NSCopying>)aKey {

    dispatch_sync(self.dispatchQueue, ^{

        [self.dictionary setObject:anObject forKey:aKey];

    });

}

- (void)removeObjectForKey:(id)aKey {

    dispatch_sync(self.dispatchQueue, ^{

        [self.dictionary removeObjectForKey:aKey];

    });

}

@end

相关文章

  • 构建一个线程安全的字典

    线程安全锁字典ConcurrentDictionary(并发字典) ConcurrentDictionary的写操...

  • 理解《Java并发编程实战》时需要回答的问题

    什么是并发性?什么是线程安全性? 什么是基本并发构建块?如何使用它来构建线程安全类? 构建线程安全类的规则清单有哪...

  • iOS中的多读单写问题

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

  • iOS中的多读单写问题

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

  • 大牛们是如何构建一个线程安全的字典的!

    看不懂的话,请留言我!!!

  • Java 技术清单

    Java 构建线程:Runable、Callable 、Thread Java 并发安全:synchronized...

  • NSCache

    NSCache类 NSCacheDelegate协议 一、NSCache特点 1、使用方便,类似字典 2、线程安全...

  • swift GCD

    队列的创建和获取: 如何设计一个线程安全的字典或数组? 在编码过程中,对数组进行多线程写入,会引起崩溃: 采用部分...

  • 线程安全锁字典ConcurrentDictionary

    单线程情况下: ConcurrentDictionary的写操作比使用锁的字典Dictionary要慢得多,而读操...

  • 并发编程实战学习

    目录 线程风险 线程风险预防 线程安全设计 并发工具 显示锁 构建自定义的同步工具 java内存模型 并发编程 线...

网友评论

      本文标题:构建一个线程安全的字典

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