NSConditionLock认识

@interface NSConditionLock : NSObject <NSLocking> {
@private
    void *_priv;
}
//使用条件初始化一个新创建的条件锁对象
- (instancetype)initWithCondition:(NSInteger)condition NS_DESIGNATED_INITIALIZER;

@property (readonly) NSInteger condition;	//条件

//必须满足条件的情况下尝试获取锁,这个方法阻塞当前线程直到满足条件的情况下获取了锁
- (void)lockWhenCondition:(NSInteger)condition;

//试着获取锁,立即返回一个布尔值,标记是否获取成功。
- (BOOL)tryLock;

//判断条件是否满足:满足尝试获取锁,该方法会调用lockWhenCondition:beforeDate:,不满足也立即返回NO。
- (BOOL)tryLockWhenCondition:(NSInteger)condition;

//并不是当 Condition 符合条件时才解锁,而是解锁之后,修改 Condition 的值
- (void)unlockWithCondition:(NSInteger)condition;

尝试在指定时间前获取锁,返回个一布尔值,标记是否获取成功;阻塞线程的执行直到获取到锁或超时。
- (BOOL)lockBeforeDate:(NSDate *)limit;

//在指定时间前,且满足条件的情况下尝试获取锁,阻塞线程知道获取到锁或到时。
- (BOOL)lockWhenCondition:(NSInteger)condition beforeDate:(NSDate *)limit;

@property (nullable, copy) NSString *name NS_AVAILABLE(10_5, 2_0);

@end

相比NSLock多了一个condition属性,多了以condition为参数的获取锁的方法。
eg:
NSConditionLock *lock = [[NSConditionLock alloc] initWithCondition:3];

//线程1
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    [lock lock];
    NSLog(@"线程1");
    sleep(3);
    NSLog(@"线程1解锁");
    [lock unlock];
    
});

//线程2
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    sleep(1);
    [lock lockWhenCondition:3];
    NSLog(@"线程2");
    NSLog(@"线程2解锁");
    [lock unlock];
});

print:和NSLock的使用差不多

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值