博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用atomic一定是线程安全的吗?
阅读量:7011 次
发布时间:2019-06-28

本文共 860 字,大约阅读时间需要 2 分钟。

这个问题很少遇到,但是答案当然不是。

atomic在set方法里加了锁,防止了多线程一直去写这个property,造成难以预计的数值。但这也只是读写的锁定。跟线程安全其实还是差一些。看下面。

@interface MONPerson : NSObject @property (copy) NSString * firstName; @property (copy) NSString * lastName; - (NSString *)fullName; @end Thread A: p.firstName = @"Rob"; Thread B: p.firstName = @"Robert"; Thread A: label.string = p.firstName; // << uh, oh -- will be Robert

但是如果有个C也在写,D在读取,D会读到一些随机的值(ABC修改的值),这就不是线程安全的了。最好的方法是使用lock。

Thread A:[p lock]; // << wait for it… … … …// Thread B now cannot access pp.firstName = @"Rob";NSString fullName = p.fullName;[p unlock];// Thread B can now access plabel.string = fullName; Thread B: [p lock]; // << wait for it… … … … // Thread A now cannot access p… [p unlock];

atomic有个很大的问题是很慢,要比nonatomic慢20倍。

当然最后建议这种数值数值变化可以让服务器来做。

文/natewang(简书作者)
原文链接:http://www.jianshu.com/p/c40b312153c1
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
你可能感兴趣的文章
Linux字符设备驱动编写流程
查看>>
一台CentOS主机上运行多个Tomcat7的配置
查看>>
SQL2K数据库开发三之收缩数据库
查看>>
优秀UML制图开源工具--ArgoUML
查看>>
Alfresco安装与配置图解
查看>>
Virtual Machine Manager 2012 R2创建SQL 配置文件
查看>>
发布【报表引擎设计.pdf】
查看>>
部署额外域控制器,Active Directory系列之四
查看>>
获取MySQL5.5表元信息
查看>>
运维自动化之ansible playbook安装zabbix客户端
查看>>
XenApp_XenDesktop_7.6实战篇之十:Delivery Controller的部署
查看>>
Java向前引用容易出错的地方
查看>>
win8居然不能支持VirtualPC、Virtualbox等虚拟机安装纠结……
查看>>
CentOS6使用第三方YUM源(EPEL、RPMForge和RPMFusion)
查看>>
Oracle dataGuard专题:Rman通过duplicate创建standby
查看>>
CCNA(Stand-ALONE)Lab2-Introduction to the Basic User Interface
查看>>
没有服务台,就没有ITSM
查看>>
加点自已内容的新内核下L7-FILTER的应用实例!
查看>>
FOSCommentBundle功能包:设置Doctrine ORM映射
查看>>
Eclipse下开发js
查看>>