条件锁NSConditionLock

2018-04-17  本文已影响0人  春眠不觉晓光

线程锁是什么?

简单来讲,线程锁的存在的就是为了确保数据安全和多线程数据同步。当使用线程A执行一段加锁的代码时,线程B调用这段代码时就被等待,只有A线程执行完此代码解锁后,B线程才可进入。

线程锁有哪些?

1、NSLock

2、@synchronized代码块

3、GCD中的信号量dispatch_semaphore_t

4、NSCondition

5、NSConditionLock

略。。。

NSConditionLock

有意思的是条件锁,这里的条件并不是bool表达式中的条件,而是一个特定的int值,操作数组很方便的那种

- (void)doConditionAction{

    while (1) {

        [conditionLock lockWhenCondition:0];

        [NSThread sleepForTimeInterval:0.5];

        [imagesArray addObject:[NSString stringWithFormat:@"%d",rand()]];

        [conditionLock unlockWithCondition:[imagesArray count]==10?[imagesArray count]:0];

        if ([imagesArray count]>=10) {

            NSLog(@"%@ 数组元素%ld个",[NSThread currentThread],[imagesArray count]);

        }else{

            NSLog(@"%@ 数组元素%ld个",[NSThread currentThread],[imagesArray count]);

        }

    }

}

上一篇 下一篇

猜你喜欢

热点阅读