初始化数据锁
NSLock *lock =[NSLock alloc]init];
数据加锁
[lock lock];
数据解锁
[lock Unlock];
简单的模拟窗口卖票加锁
#import "ViewController.h"
@interface ViewController ()
{
int _ticketCount;//总票数
int _soldCount;//已经卖了多少张票
NSLock *_lock;//数据锁
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
_ticketCount = 100;
_soldCount = 0;
//初始化锁
_lock = [[NSLock alloc] init];
//第一窗口
NSThread *thread1 = [[NSThread alloc] initWithTarget:self selector:@selector(soldTicket) object:nil];
thread1.name = @"thread_1";
[thread1 start];
//第二窗口
NSThread *thread2 = [[NSThread alloc] initWithTarget:self selector:@selector(soldTicket) object:nil];
thread2.name = @"thread_2";
[thread2 start];
//第三窗口
NSThread *thread3 = [[NSThread alloc] initWithTarget:self selector:@selector(soldTicket) object:nil];
thread3.name = @"thread_3";
[thread3 start];
}
-(void)soldTicket
{
//加锁
[_lock lock];
int current = _ticketCount;
if (current == 0) {
NSLog(@"------%@ 剩余票数:%d",[[NSThread currentThread] name],_ticketCount);
NSLog(@"-------卖的总票数:%d",_soldCount);
[_lock unlock];
return;
}
//延时卖票
[NSThread sleepForTimeInterval:0.3];
_ticketCount = current-1;
_soldCount++;
NSLog(@"------%@ 剩余票数:%d",[[NSThread currentThread] name],_ticketCount);
//解锁
[_lock unlock];
//一直卖票
[self soldTicket];
}
@end
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。