#import "ViewController.h"
#define BUYER 10
@interface ViewController ()
@property (nonatomic,copy)NSMutableArray *ticket;
//nonatomic 属性读取的是内存数据,(寄存器计算好的数据)
//atomic 保证直接读取寄存器的数据,(这样就不会出现一个线程在修改数据,而另一个线程读取了修改之前的数据)永远保证同时只有一个线程在使用数据
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
_lock=[[NSLock alloc]init];
_ticket=[NSMutableArray array];
[_ticket addObjectsFromArray:@[@"1.上铺",@"1.中铺",@"1.下铺"]];
[self begin];
}
-(void)begin{
dispatch_queue_t queue=dispatch_queue_create("myQueue", DISPATCH_QUEUE_CONCURRENT);
//
for (int i=0; i<BUYER; i++) {
dispatch_async(queue, ^{
// 使用时吧把资源抢夺部分的代码放到lock 和 unlock之间
// 当一个线程A进入加锁代码后,另一个线程B他就无法访问了,只有当线程A执行完加锁的任务后,B线程才能访问加锁代码
// @synchronized(self)等同与加锁
// [_lock lock];//上锁
//子线程
@synchronized(self) {//同步
if ([_ticket count]>0) {
NSLog(@"%d 买到了 %@",i,[_ticket lastObject]);
[_ticket removeLastObject];
}else{
NSLog(@"%d 没买到",i);
}
}
// [_lock unlock];
});
}
}