//加锁之后 同一时刻 只允许一个线程访问
//数据修改前 加锁
[self.lock lock];
num–;
NSLog(@”%@ num = %d”,[NSThread currentThread].name,num);
[NSThread sleepForTimeInterval:0.5];
if(num == 0){
break;
}
//数据修改后 解锁
[self.lock unlock];加锁单例
@implementation Single
//全局静态变量
static Single * single;+(instancetype)shareSingle{
//加锁 同一时刻只允许一个线程访问
@synchronized(self){
if (!single) {
single = [[Single alloc] init];
}
}
//GCD加锁 dispatch_once_t只会执行一次
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
single = [[Single alloc] init];
});
return single;
}
//重写这个方法 可以让我们用alloc创建的对象也是同一份对象
+(instancetype)allocWithZone:(struct _NSZone *)zone{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
single = [super allocWithZone:zone];
});
return single;
}
//copy的对象也是同一个对象
-(id)copyWithZone:(NSZone *)zone{
return single;
}