王尘宇王尘宇

研究百度干SEO做推广变成一个被互联网搞的人

atomic与线程安全

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
实际上

相关文章

评论列表

发表评论:
验证码

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。