线程锁

iOS 多线程加锁有很多方式:@synchronizedNSLockNSRecursiveLockNSConditionNSConditionLockpthread_mutexdispatch_semaphoreOSSpinLockatomic(property) set/get等等。

NSLock 类为并发编程实现了一种基本的互斥锁。
相对于 @synchronized 的隐式创建锁,NSLock是直接创建锁。

NSLocking 协议

@protocol NSLocking
- (void)lock;
- (void)unlock;
@end

NSLock

NSLock 遵循的NSLocking 协议

@property (nullable, copy) NSString *name API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));
- (BOOL)tryLock;
- (BOOL)lockBeforeDate:(NSDate *)limit;

NSConditionLock 条件锁

NSConditionLock类定义了一种只在特定条件(这条件是由开发者自己定义的整数值)下才能被获取和释放的锁。用于确保任务在以指定的顺序执行。NSConditionLock类遵循的NSLocking 协议。
条件锁有些相似于GCD的信号量dispatch_semaphore

  • 初始化
- (instancetype)initWithCondition:(NSInteger)condition NS_DESIGNATED_INITIALIZER;
@property (readonly) NSInteger condition;
  • condition = YES,
-(void)basicCondition{
    NSConditionLock *lock = [[NSConditionLock alloc]initWithCondition:NO];
    [lock lock];
    [lock unlockWithCondition:YES];
}

NSRecursiveLock

NSRecursiveLock类定义了一个在不引起死锁的情况下,可以被同一个线程多次获取的锁。NSConditionLock类遵循的NSLocking 协议。

NSCondition

  • 让当前线程处于等待的状态
- (void)wait;
  • 增加信号量量,让程序可以运行
- (void)signal;

你可能感兴趣的:(线程锁)