多线程在Objective-C项目中占有很大的比重,它能提高程序的运行效率,但也因此带来线程安全问题。而锁就是解决线程安全问题最常用的武器。
锁有很多种。
1、NSLock,非递归锁
NSLock *aLock = [[NSLock alloc] init];[aLock lock];// 临界区[aLock unlock];
同个线程,连续lock多次会死锁
NSLock *aLock = [[NSLock alloc] init];[aLock lock];[aLock lock]; // 死锁...
2、NSRecursiveLock,递归锁
NSRecursiveLock *aLock = [[NSLock alloc] init];[aLock lock];// 临界区[aLock unlock];
同个线程,连续lock多次不会死锁
NSRecursiveLock *aLock = [[NSLock alloc] init];[aLock lock];...[aLock lock]; // 不会死锁...[aLock unlock];...[aLock unlock];
3、@synchronized
参见:
4、dispatch_semaphore
参见:
5、OSSpinLock,自旋锁
OSSpinLock lock = OS_SPINLOCK_INIT;OSSpinLockLock(&lock);OSSpinLockUnlock(&lock);
但是不安全,忙等待
pthread_mutex
NSCondition
NSConditionLock