美文网首页
iOS 条件锁

iOS 条件锁

作者: 满庭花醉三千客 | 来源:发表于2018-08-07 14:33 被阅读17次

整理一下条件锁~
直接上代码:

- (void)testConditionLock
{
    //构建条件锁,条件值为1
    NSConditionLock *lock = [[NSConditionLock alloc]initWithCondition:1];
    
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        //线程1 传入9,与条件值不相等,无法正确进行加锁操作,会阻塞线程
        [lock lockWhenCondition:9];
        NSLog(@"11111");
        sleep(1);
        [lock unlock];
    });
    
    
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        sleep(1);
        //传入1,如果与条件的值相等,返回YES;如果不相等则返回NO,不会阻塞当前线程
        if ([lock tryLockWhenCondition:1]) {
            NSLog(@"22222");
            NSLog(@"2加锁");
            //解锁,并把条件值修改为4
            [lock unlockWithCondition:4];
        }else{
            NSLog(@"2加锁失败");
        }
    });
    
    
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        sleep(2);
        //传入4,如果与条件的值相等,则返回YES;不相等则返回NO,不会阻塞线程
        if ([lock tryLockWhenCondition:4]) {
            NSLog(@"33333");
            //解锁
            [lock unlock];
            NSLog(@"3加锁");
        }else{
            NSLog(@"3加锁失败");
        }
    });
    
    
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        sleep(3);
        //传入4,如果与条件的值相等,则返回YES;不相等则返回NO,不会阻塞线程
        if ([lock tryLockWhenCondition:4]) {
            NSLog(@"4444");
            NSLog(@"4加锁");
            //解锁,并把条件值改为9,此时线程1的条件锁可以正常加锁
            [lock unlockWithCondition:9];
        }else{
            NSLog(@"4加锁失败");
        }
    });
    
    
}


结果.png

加油~

相关文章

网友评论

      本文标题:iOS 条件锁

      本文链接:https://www.haomeiwen.com/subject/bgtavftx.html