Objective-C中的多线程之NSThread线程锁

使用线程锁控制多线程同步进行:

#import "ViewController.h"

@interface ViewController ()
@property (nonatomic) int leftTicketCount; //剩余票数
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

-(void)saleTickets {
    while(true) {
        [NSThread sleepForTimeInterval:1.0];
        @synchronized(self){
            if(_leftTicketCount > 0){
                _leftTicketCount--;
                NSLog(@"%@卖了一张票,现在剩余%d张票!",[NSThread currentThread].name, _leftTicketCount);
            } else {
                NSLog(@"没有余票了");
                return;
            }
        }
    }
}

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    //total tickets
    self.leftTicketCount = 50;
    
    //create the first thread
    NSThread *t1 = [[NSThread alloc]initWithTarget:self selector:@selector(saleTickets) object:nil];
    t1.name = @"窗口1";
    [t1 start];
    
    //create the second thread
    NSThread *t2 = [[NSThread alloc]initWithTarget:self selector:@selector(saleTickets) object:nil];
    t2.name = @"窗口2";
    [t2 start];
    
    //create the third thread
    NSThread *t3 = [[NSThread alloc]initWithTarget:self selector:@selector(saleTickets) object:nil];
    t3.name = @"窗口3";
    [t3 start];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


@end

Log:

2018-03-26 10:02:42.342532+0800 TOCTheadd[12335:5958562] 窗口2卖了一张票,现在剩余49张票!

2018-03-26 10:02:42.343671+0800 TOCTheadd[12335:5958561] 窗口1卖了一张票,现在剩余48张票!

2018-03-26 10:02:42.344288+0800 TOCTheadd[12335:5958563] 窗口3卖了一张票,现在剩余47张票!

2018-03-26 10:02:43.346639+0800 TOCTheadd[12335:5958562] 窗口2卖了一张票,现在剩余46张票!

2018-03-26 10:02:43.348080+0800 TOCTheadd[12335:5958561] 窗口1卖了一张票,现在剩余45张票!

2018-03-26 10:02:43.349066+0800 TOCTheadd[12335:5958563] 窗口3卖了一张票,现在剩余44张票!

2018-03-26 10:02:44.348315+0800 TOCTheadd[12335:5958562] 窗口2卖了一张票,现在剩余43张票!

2018-03-26 10:02:44.353337+0800 TOCTheadd[12335:5958561] 窗口1卖了一张票,现在剩余42张票!

2018-03-26 10:02:44.353698+0800 TOCTheadd[12335:5958563] 窗口3卖了一张票,现在剩余41张票!

2018-03-26 10:02:45.350935+0800 TOCTheadd[12335:5958562] 窗口2卖了一张票,现在剩余40张票!

2018-03-26 10:02:45.357690+0800 TOCTheadd[12335:5958563] 窗口3卖了一张票,现在剩余39张票!

2018-03-26 10:02:45.357968+0800 TOCTheadd[12335:5958561] 窗口1卖了一张票,现在剩余38张票!

2018-03-26 10:02:46.357804+0800 TOCTheadd[12335:5958562] 窗口2卖了一张票,现在剩余37张票!

2018-03-26 10:02:46.362959+0800 TOCTheadd[12335:5958563] 窗口3卖了一张票,现在剩余36张票!

2018-03-26 10:02:46.363886+0800 TOCTheadd[12335:5958561] 窗口1卖了一张票,现在剩余35张票!

2018-03-26 10:02:47.362124+0800 TOCTheadd[12335:5958562] 窗口2卖了一张票,现在剩余34张票!

2018-03-26 10:02:47.363706+0800 TOCTheadd[12335:5958563] 窗口3卖了一张票,现在剩余33张票!

2018-03-26 10:02:47.364740+0800 TOCTheadd[12335:5958561] 窗口1卖了一张票,现在剩余32张票!

2018-03-26 10:02:48.368593+0800 TOCTheadd[12335:5958562] 窗口2卖了一张票,现在剩余31张票!

2018-03-26 10:02:48.368965+0800 TOCTheadd[12335:5958563] 窗口3卖了一张票,现在剩余30张票!

2018-03-26 10:02:48.369363+0800 TOCTheadd[12335:5958561] 窗口1卖了一张票,现在剩余29张票!

2018-03-26 10:02:49.371905+0800 TOCTheadd[12335:5958562] 窗口2卖了一张票,现在剩余28张票!

2018-03-26 10:02:49.372403+0800 TOCTheadd[12335:5958563] 窗口3卖了一张票,现在剩余27张票!

2018-03-26 10:02:49.372824+0800 TOCTheadd[12335:5958561] 窗口1卖了一张票,现在剩余26张票!

2018-03-26 10:02:50.373295+0800 TOCTheadd[12335:5958562] 窗口2卖了一张票,现在剩余25张票!

2018-03-26 10:02:50.373627+0800 TOCTheadd[12335:5958563] 窗口3卖了一张票,现在剩余24张票!

2018-03-26 10:02:50.373779+0800 TOCTheadd[12335:5958561] 窗口1卖了一张票,现在剩余23张票!

2018-03-26 10:02:51.374843+0800 TOCTheadd[12335:5958561] 窗口1卖了一张票,现在剩余22张票!

2018-03-26 10:02:51.376392+0800 TOCTheadd[12335:5958563] 窗口3卖了一张票,现在剩余21张票!

2018-03-26 10:02:51.377270+0800 TOCTheadd[12335:5958562] 窗口2卖了一张票,现在剩余20张票!

2018-03-26 10:02:52.381429+0800 TOCTheadd[12335:5958561] 窗口1卖了一张票,现在剩余19张票!

2018-03-26 10:02:52.382223+0800 TOCTheadd[12335:5958563] 窗口3卖了一张票,现在剩余18张票!

2018-03-26 10:02:52.383064+0800 TOCTheadd[12335:5958562] 窗口2卖了一张票,现在剩余17张票!

2018-03-26 10:02:53.382445+0800 TOCTheadd[12335:5958561] 窗口1卖了一张票,现在剩余16张票!

2018-03-26 10:02:53.388314+0800 TOCTheadd[12335:5958563] 窗口3卖了一张票,现在剩余15张票!

2018-03-26 10:02:53.388715+0800 TOCTheadd[12335:5958562] 窗口2卖了一张票,现在剩余14张票!

2018-03-26 10:02:54.383012+0800 TOCTheadd[12335:5958561] 窗口1卖了一张票,现在剩余13张票!

2018-03-26 10:02:54.391504+0800 TOCTheadd[12335:5958563] 窗口3卖了一张票,现在剩余12张票!

2018-03-26 10:02:54.391970+0800 TOCTheadd[12335:5958562] 窗口2卖了一张票,现在剩余11张票!

2018-03-26 10:02:55.388270+0800 TOCTheadd[12335:5958561] 窗口1卖了一张票,现在剩余10张票!

2018-03-26 10:02:55.392236+0800 TOCTheadd[12335:5958563] 窗口3卖了一张票,现在剩余9张票!

2018-03-26 10:02:55.392578+0800 TOCTheadd[12335:5958562] 窗口2卖了一张票,现在剩余8张票!

2018-03-26 10:02:56.389394+0800 TOCTheadd[12335:5958561] 窗口1卖了一张票,现在剩余7张票!

2018-03-26 10:02:56.393165+0800 TOCTheadd[12335:5958562] 窗口2卖了一张票,现在剩余6张票!

2018-03-26 10:02:56.393557+0800 TOCTheadd[12335:5958563] 窗口3卖了一张票,现在剩余5张票!

2018-03-26 10:02:57.390025+0800 TOCTheadd[12335:5958561] 窗口1卖了一张票,现在剩余4张票!

2018-03-26 10:02:57.394714+0800 TOCTheadd[12335:5958563] 窗口3卖了一张票,现在剩余3张票!

2018-03-26 10:02:57.395083+0800 TOCTheadd[12335:5958562] 窗口2卖了一张票,现在剩余2张票!

2018-03-26 10:02:58.392514+0800 TOCTheadd[12335:5958561] 窗口1卖了一张票,现在剩余1张票!

2018-03-26 10:02:58.395251+0800 TOCTheadd[12335:5958563] 窗口3卖了一张票,现在剩余0张票!

2018-03-26 10:02:58.399989+0800 TOCTheadd[12335:5958562] 没有余票了

2018-03-26 10:02:59.397768+0800 TOCTheadd[12335:5958563] 没有余票了

2018-03-26 10:02:59.398356+0800 TOCTheadd[12335:5958561] 没有余票了



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值