iOS atomic和nonatomic

nonatomic:非原子属性,线程不安全的,效率高
atomic:原子属性,线程安全的,效率相对低。
原子属性是一种单(线程)写多(线程)读的多线程技术,不过可能会出现脏数据

atomic属性内部的锁称为 自旋锁
凡是线程安全的对象,内部肯定会加锁。

自旋锁和互斥锁
相同点:都能保证同一时间只有一个线程访问共享资源。都能保证线程安全。
不同点:
互斥锁:如果共享数据已经有其他线程加锁了,线程会进入休眠状态等待锁。一旦被访问的资源被解锁,则等待资源的线程会被唤醒。
自旋锁:如果共享数据已经有其他线程加锁了,线程会以死循环的方式等待锁,一旦被访问的资源被解锁,则等待资源的线程会立即执行。
自旋锁的效率高于互斥锁。

IOS开发建议

所有属性都声明为nonatomic
尽量避免多线程抢夺同一块资源
尽量将加锁、资源抢夺的业务逻辑交给服务器端处理,减少移动客户端的压力

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

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,547评论 8 265
  • 前言 iOS开发中由于各种第三方库的高度封装,对锁的使用很少,刚好之前面试中被问到的关于并发编程锁的问题,都是一知...
    喵渣渣阅读 3,722评论 0 33
  • 今天跟爸爸坦白自己换了苹果手机。 买手机是两个月前的事情,昨天刚还了第二个月的分期费用。事情其实也很简单,无非是学...
    今口萧阅读 232评论 1 1
  • 冰.月亮.梅 (2018.02.01) 冰冻三尺一夜寒, 农家屋檐冰连天, 地冻山腰月亮红, 梅花欢喜尽开颜。
    向协武阅读 222评论 2 1