多线程——原子、非原子,自旋锁和互斥锁
nonatomic:非原子属性,线程不安全,但是效率高
atomic:原子属性,线程安全,但是效率低
原子属性是一种单线程写,多线程读(单写多读)的多线程技术,不过可能出现脏数据。
atomic属性内部的锁是 称作 自旋锁
凡是内部线程安全的对象,内部肯定会加锁
自旋锁与互斥锁的区别
.相同点:
都能保证同一个时间只有一个线程访问共享资源,都能保证线程安全
.
.不同点:
互斥锁:如果数据已经有其他线程加锁了,线程会进入休眠等待锁,一旦访问的资源被解锁,则等待资源的线程被唤醒
自旋锁:如果数据已经有线程加锁了,线程会以死循环的方式等待锁,一旦被访问的资源被解锁,则等待资源的线程立即执行‘
自旋锁效率高,因为人家主动,主动的有饭吃
.
开发建议:
所有属性都声明为nonatomic
尽量避免多线程抢夺同一资源