关于NSMutableDictionary线程安全

我们都知道,NSMutableDictionary是线程不安全的。

NSMutableDictionary线程不安全会崩溃,之前认为不安全原因主要是因为一个对象去设置一个值,另外一个线程同时去设置,可能会导致值对象内存重复释放。

按着这个思路,今天在一个多线程不会同时去设置同一个key时,发现一样也会崩溃。比较纳闷。

网上搜了一下,有提到线程不安全确认不仅和内存重复释放这方面有关,还有可能访问到垃圾内存,但没说具体原因。

细想一下,会不会是字典扩容呢。

对,如果是字典扩容的时候,多线程访问很有可能访问到垃圾内存。

然后做了个测试,初始化不同的capacity,发现50个线程设置了100个capacity的时候,确实没有再出现崩溃了。

知道了崩溃的原因,其实像有些情况如果知道大概NSMutableDictionary用的情景,如果追求高效率,设置一个合适的capacity,也未尝不可以在多线程中不使用锁直接使用哈

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容