//異步
// 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;
@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];
//使用時,把須要枷鎖的代碼放在Locck和unlock之間
//當一個線程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