您的位置:首页 > 其它

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方法加锁
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: