atomic getter
atomic setter
你会发现atomic属性的setter/getter方法都被加了spinlock自旋锁。但是,需要注意的是spinlock已经由于存在优先级反转问题被弃用并用os_unfair_lock替代。既然被弃用了,这里为什么还在用;原因是进入spinlock_t去看会发现,底层已经被os_unfair_lick替换:
spinlock_t
光讲代码不易懂,来个例子
如果定义属性NSInteger i是原子的,对i进行i = i + 1操作就是不安全的; 因为原子性只能保证读写安全,而该表达式需要三步操作:
1、读取i的值存入寄存器;
2、将i加1;
3、修改i的值;
如果在第一步完成的时候,i被其他线程修改了,那么表达式执行的结果就与预期的不一样,也就是不安全的。
例 2
上图中我认为slice1,slice2打印应该是1到100
实际上

评论列表