iOS atomic 保证了读和写的过程是可靠的,但并不能保证数据一定是可靠的
其实很简单的例子,如果定义属性 NSInteger i 是原子的,对i进行 i = i + 1; 操作就是不安全的。因为原子性只能保证读写安全,而该表达式需要三步操作:1.读取i的值存入寄存器;2.将i加1;3.修改i的值;如果在第1步完成的时候,i被其他线程修改了,那么表达式执行的结果就会与预期的不一样,也就是不安全的。
其实很简单的例子,如果定义属性 NSInteger i 是原子的,对i进行 i = i + 1; 操作就是不安全的。因为原子性只能保证读写安全,而该表达式需要三步操作:1.读取i的值存入寄存器;2.将i加1;3.修改i的值;如果在第1步完成的时候,i被其他线程修改了,那么表达式执行的结果就会与预期的不一样,也就是不安全的。