iOS 07-线程安全 同步锁

来源:互联网 发布:淘宝特卖苹果手机 编辑:程序博客网 时间:2024/05/22 13:06

#import "ViewController.h"


@interface ViewController ()


@property (nonatomic,strong) NSThread *th1;

@property (nonatomic,strong) NSThread *th2;

@property (nonatomic,strong) NSThread *th3;


@property (nonatomic,assign) NSInteger tickets;


@end


@implementation ViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    self.tickets =1000;

    self.th1 = [[NSThreadalloc] initWithTarget:selfselector:@selector(sellTickets)object:nil];

    self.th1.name =@"小丽";

    self.th2 = [[NSThreadalloc] initWithTarget:selfselector:@selector(sellTickets)object:nil];

    self.th2.name =@"小明";

    

    self.th3 = [[NSThreadalloc] initWithTarget:selfselector:@selector(sellTickets)object:nil];

    self.th3.name =@"小张";

    

}


-(void)sellTickets {

    

    while (self.tickets >0) {

        //token 锁对象锁对象时同一个,时唯一的、这里用self即可

        @synchronized (self) {

            NSInteger currentTickers =self.tickets;

            if (currentTickers >0) {

                NSLog(@"%@卖一张票,还剩下%ld", [NSThread currentThread].name,

                      --self.tickets);

            }else{

                NSLog(@"已经售罄");

            }

        }

       

    }

    

}


-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event

{

    [self.th1start];

    [self.th2start];

    [self.th3start];

}


- (void)didReceiveMemoryWarning {

    [superdidReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end