1.atomic的实现机制
用atomic修饰的值类型属性赋值的时候,系统会给getter和setter方法里面加一个锁,来保证同时只有一个线程能访问或者修改该属性。保证读写的原子性。所以atomic能保证属性的存取时是线程安全的
2.atomic为什么不能保证绝对的线程安全?
2.1 因为atomic给getter和setter方法加了锁,但是只能保证存取是安全的,如果我此时创建了一个用atomic修饰的可变数组,atomic无法保证在对数组进行修改是线程安全的
2.2 在编译器自己创建的getter/setter方法里面,最终会调到objc_getProperty和objc_setProperty方法,在这两个方法内部,atomic保证了读写线程的安全。但是,如果我重写了getter/setter方法,那atomic对getter/setter的保护也就没了,这时候就需要自己去维护线程安全了。
网友评论