同步锁(必须放对象类型加锁才有效)
@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方法加锁