Objective-C 锁
多线程在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
参见:https://www.cnblogs.com/yangwenhuan/p/9193840.html
4、dispatch_semaphore
参见:https://www.cnblogs.com/yangwenhuan/p/9439720.html
5、OSSpinLock,自旋锁
OSSpinLock lock = OS_SPINLOCK_INIT; OSSpinLockLock(&lock); OSSpinLockUnlock(&lock);
但是不安全,忙等待
pthread_mutex
NSCondition
NSConditionLock