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

原文地址:https://www.cnblogs.com/yangwenhuan/p/9264338.html