线程锁

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;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ReentrantLock 介绍 一个可重入的互斥锁,它具有与使用{synchronized}方法和语句访问的隐式...
    tomas家的小拨浪鼓阅读 4,136评论 1 4
  • 进程和线程 进程 所有运行中的任务通常对应一个进程,当一个程序进入内存运行时,即变成一个进程.进程是处于运行过程中...
    小徐andorid阅读 2,865评论 3 53
  • 1.解决信号量丢失和假唤醒 public class MyWaitNotify3{ MonitorObject m...
    Q罗阅读 924评论 0 1
  • 计算两个班的人数 取余运算 求差值 输入操作
    我有只熊阅读 335评论 0 0
  • 我一直认为特朗普是个神奇的人,他在竞选以来可以说被美国上流社会一致的看衰,认为他的言行简直就是无理取闹、毫无逻辑。...
    刘振坤Pierce阅读 400评论 0 0