美文网首页
3.线程安全

3.线程安全

作者: HFY_Code | 来源:发表于2016-08-19 14:29 被阅读0次
    4.线程安全与互斥锁.png

    ######## 互斥锁就像茅房的门上的锁,就一个坑,不能都进去吧!😄😄,一个一个来!

    #import "ViewController.h"
    
    @interface ViewController ()
    /** 售票员01 */
    @property (nonatomic, strong) NSThread *thread01;
    /** 售票员02 */
    @property (nonatomic, strong) NSThread *thread02;
    /** 售票员03 */
    @property (nonatomic, strong) NSThread *thread03;
    
    /** 票的总数 */
    @property (nonatomic, assign) NSInteger ticketCount;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        self.ticketCount = 100;
        
        self.thread01 = [[NSThread alloc] initWithTarget:self selector:@selector(saleTicket) object:nil];
        self.thread01.name = @"售票员01";
        
        self.thread02 = [[NSThread alloc] initWithTarget:self selector:@selector(saleTicket) object:nil];
        self.thread02.name = @"售票员02";
        
        self.thread03 = [[NSThread alloc] initWithTarget:self selector:@selector(saleTicket) object:nil];
        self.thread03.name = @"售票员03";
    }
    
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        [self.thread01 start];
        [self.thread02 start];
        [self.thread03 start];
    }
    
    - (void)saleTicket
    {
        while (1)
        {
          //开锁进茅房蹲坑
            @synchronized(self)
            {
                // 先取出总数
                NSInteger count = self.ticketCount;
                if (count > 0)
                {
                    self.ticketCount = count - 1;
                    NSLog(@"%@卖了一张票,还剩下%zd张", [NSThread currentThread].name, self.ticketCount);
                } else
                {
                    NSLog(@"票已经卖完了");
                    break;
                }
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:3.线程安全

          本文链接:https://www.haomeiwen.com/subject/vbybsttx.html