标签:
线程安全指的是当多个线程可能会访问同一块资源
比如多个线程访问同一个对象、同一个变量、同一个文件
当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题
- (void)viewDidLoad { //默认有20张票 self.leftTicketsCount=20; //开启多个线程,模拟售票员售票 self.thread1=[[NSThread alloc]initWithTarget:self selector:@selector(sellTickets) object:nil]; self.thread1.name=@"售票员A"; self.thread2=[[NSThread alloc]initWithTarget:self selector:@selector(sellTickets) object:nil]; self.thread2.name=@"售票员B"; self.thread3=[[NSThread alloc]initWithTarget:self selector:@selector(sellTickets) object:nil]; self.thread3.name=@"售票员C"; [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } -(void)sellTickets { while (1) { @synchronized(self){//只能加一把锁,下面为同步代码块; //1.先检查票数 int count=self.leftTicketsCount; if (count>0) { //暂停一段时间 [NSThread sleepForTimeInterval:0.002]; //2.票数-1 self.leftTicketsCount= count-1; //获取当前线程 NSThread *current=[NSThread currentThread]; NSLog(@"%@--卖了一张票,还剩余%d张票",current,self.leftTicketsCount); }else { //退出线程 [NSThread exit]; } } } } -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { //开启线程 [self.thread1 start]; [self.thread2 start]; [self.thread3 start]; }
标签:
原文地址:http://www.cnblogs.com/sunjianfei/p/5725010.html