美文网首页
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