iOS中的锁
废话不多说。本篇博客借鉴于《高性能iOS 开发》
NSLock
这是一种低端锁。一旦获取锁,执行则进入临界区,且不会允许超过一个线程并行执行。释放锁则标记临界区结束。
@interface ThreadSafeClass () {
NSLock *_lock;
}
@end
@implementation ThreadSafeClass
- (instancetype)init
{
self = [super init];
if (self) {
_lock = [NSLock new];
}
return self;
}
- (void)threadSafeMethod
{
[_lock lock];
//threadSafe code
[_lock unlock];
}
@end
NSRecursiveLock 递归锁
递归锁可以被同一线程多次请求,而不会引起死锁。这主要是用在循环或递归操作中
在调用lock之前,NSLock必须先调用unlock。但是递归锁不然,NSRecursiveLock允许在被解锁前锁定多次。如果解锁的次数与锁定的次数相匹配,则认为锁被释放。其他线程可以获取锁。当类中有多个方法使用同一个锁进行同步,且其中一个方法调用另一个方法时,NSRecursiveLock 非常有用。
如下例子
- (instancetype)init
{
self = [super init];
if (self) {
_recursiveLock = [NSRecursiveLock new];
}
return self;
}
- (void)threadSafeMethod1
{
[_recursiveLock lock];
//threadSafe code
sleep(2);
NSLog(@"method 1===%@",_string);
[self threadSafeMethod2];
[_recursiveLock unlock];
}
- (void)threadSafeMethod2
{
[_recursiveLock lock];
// threadSafe code
sleep(1);
NSLog(@"method 2===%@