atomic 加锁操作
2015-11-04 20:23
274 查看
同步锁(必须放对象类型加锁才有效)
@property (atomic, strong) NSString *name; //setter - (void)setName:(name) { //同步锁,保证同时只有一个线程可以访问此对象 @synchronized(_name){ if (_name != name){ [_name release]; _name = [name retain]; } } } //getter - (void)name{ @synchronized(_name){ return [[_name retain] autorelease]; } }
为什么加锁:
多线程的安全隐患
资源共享
一块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源
比如多个线程访问同一个对象、同一个变量、同一个文件
当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题
互斥锁的优缺点:
优点:能有效防止因多线程抢夺资源造成的数据安全问题
缺点:需要消耗大量的CPU资源
互斥锁的使用前提:多条线程抢夺同一块资源
相关专业术语:线程同步,多条线程按顺序地执行任务
互斥锁,就是使用了线程同步技术
原子和非原子属性
OC在定义属性时有nonatomic和atomic两种选择
atomic:原子属性,为setter方法加锁(默认就是atomic)
nonatomic:非原子属性,不会为setter方法加锁
相关文章推荐
- 【转】淘测试---新时代的测试工程师
- java语言写文件内容
- NSNotificationCenter观察者模式
- hdu1219
- 简单邻接表构造图
- Linux命令——w
- 为什么for(int i=0;i<9;i++) 在c语言中是错误的?
- hdu1219
- hdu1219
- 源生javascript将xml转换成json格式
- sde用sql实现erase
- 归并排序算法之Java实现
- Tomcat 8 解决“At least one JAR was scanned for TLDs yet contained no TLDs”问题
- sde用sql实现erase
- springmvc mybatis 整合 框架源码 bootstrap html5 mysql oracle spring
- C++primer第五版第三章学习笔记
- RecyclerView的下拉刷新和自动加载更多
- Android自定义相机超详细讲解
- hdu5521 Meeting
- AlertDialog中View中的控件设置监听