1.@synchronized关键字
多块资源在同时访问同一块资源时,可以对线程响应的代码加互斥锁(只能加一把锁)
同步锁需要消耗大量的CPU资源,建议少用。
@synchronized(self){
//检查票数
int count = self.leftTicketsCount;
if (count > 0)
{
//暂停一段时间
[NSThread sleepForTimeInterval:0.002];
//票数-1
self.leftTicketsCount = count-1;
//获取当前线程
NSThread *current = [NSThread currentThread];
NSLog(@"%@--卖了一张票,还剩余%d张票",current,self.leftTicketsCount);
}
else
{
//退出线程
[NSThread exit];
}
}
2.原子属性也可保证线程安全,它是基于互斥锁的。同样需要消耗大量资源。
@property (assign, atomic) int age;
3.使用互斥锁NSLock
注:锁定(lock)和解锁(unLock)必须配对使用