OBObjective-c 多线程(锁机制) 解决资源抢夺问题

//异步

//  ViewController.masync

//  解决资源抢夺问题atom

//spa

//  Created by DC017 on 15/12/25..net

//  Copyright © 2015 DC017. All rights reserved.线程

//3d


#import "ViewController.h"orm


@interface ViewController ()内存

//nonatomic 属性读取的是内存数据(寄存器计算好的结果)资源

//atomic 属性保证直接读取寄存器的数据,*****[这样就不会出现一个线程正在修改数据,而另外一个线程读取了修改以前的属性]*****永远保证同时只有一个线程在访问一个属性


{

    NSLock * lock;

}

@property(atomic,strong)NSMutableArray * muarray;


@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    _muarray=[[NSMutableArray alloc]init];

    [_muarray addObjectsFromArray:@[@"1.",@"2.",@"3."]];

    [self beginSell];

    

    lock=[[NSLock alloc]init];

    

   

    

    

}

#pragma mark 锁机制

//IOS 中经常使用两种方法

//1.NSLock

//2.@synchronized

-(void)buyTicket:(int)buyer{

    //1.NSLock

//    [lock lock];

    //使用时,把须要枷锁的代码放在Locckunlock之间

    //当一个线程A进入枷锁代码后,另外一个线程B他就没法访问,只能当线程A执行完成任务之后,才能访问

    

    //2.@synchronized

    @synchronized(self) {

        if (_muarray.count>0) {

            NSLog(@"%d号顾客买到了票:%@",buyer,[_muarray lastObject]);

            [_muarray removeLastObject];

            

        }else{

            NSLog(@"%d顾客没有抢到票",buyer);

            

        }


    } //    [lock unlock];

}

-(void)beginSell{

    dispatch_queue_t globalQueue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    //建立10个线程用于抢票(10我的来买票)

    for (int i=0; i<10; i++) {

        //异步操做

        dispatch_async(globalQueue, ^{

            [self buyTicket:i];

        });

    }

}

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end

相关文章
相关标签/搜索