atomic不能足够安全(effective objective

2017-06-23  本文已影响9人  test158888

如果一个线程循环的读数据,一个线程循环写数据,那么肯定会产生内存问题,声明一个NSMutableArray的原子属性stuff,此时self.arr 和self.arr = otherarr都是线程安全的。如使用[self.arr objectAtIndex:index]就不是线程安全的,这和setter、getter没有关系,一个线程在连续多次读取某属性值的间隔过程中若又别的线程同时在改写该值,那么即便将属性声明为atomic也还是会读到不同的属性值。。好的解决方案就是加锁。

atomic使用同步锁开销比较大,atomic要比nonatomic慢大约20倍。一般如果条件允许,我们可以让服务器来进行加锁操作。

解决 使用串行同步队列与并发队列(异步派发)(栅栏块)结合,而且不会阻塞执行异步派发的线程

上一篇下一篇

猜你喜欢

热点阅读