//互斥锁
NSLock *_lock;
_lock = [[NSLock alloc] init];
while (1)
{
[_lock lock];
//相关操作...
[_lock unlock];
}
//条件锁
NSCondition *_condition;
_condition = [[NSCondition alloc] init];
- (void)doSomethingA
{
[_condition lock];
//...相关操作...
// A执行完毕 发送signal
[_condition signal];
[_condition unlock];
}
- (void)doSomethingB
{
[_condition lock];
//...相关操作
// 线程等待 一直等到某一个线程发送信号 signal, wait放在相关操作的后面,此处比较特殊
[_condition wait];
[_condition unlock];
}
//原子锁
@property (atomic, assign) NSInteger totalCount;
//synchronized
@synchronized(self) {
if (self.totalCount > 0) {
self.totalCount--;
} else {
break;
}
}
1.为了保证性能,atomic仅针对属性的setter方法做了保护
2.共享资源时,如果涉及到属性的getter方法,可以使用互斥锁@synchronized可以保证属性在多个线程之间的读写都是安全的
3.无论是atomic还是@synchronized,使用的代价都是高昂的
4.更新UI相关操作,必须放在主线程执行。