互斥锁用来将读写进行锁住,以防止其它线程提取进行进行完读写,自己线程往后延迟进行读写导致数据出现紊乱。
注意点:借用一个对象的锁要注意借用的那个对象是个固定对象,不是固定对象的话,当第一条线程在执行的时候,第二条线程也能执行开锁区的代码,那就可能会造成同读同写,明明数据是变化了两次,结果只变化了一次的错误
while (1) {
//UIView *view = [[UIView alloc] init];
//不能借用view这个变化对象的内部锁
@synchronized(self) {int currentTickets = self.tickets;
if (currentTickets > 0) {
NSLog(@"还剩%i张票",--self.tickets);
}
else if (currentTickets == 0){
NSLog(@"票已售完");
break;
}
}
}