线程锁是什么?
简单来讲,线程锁的存在的就是为了确保数据安全和多线程数据同步。当使用线程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]);
}
}
}
网友评论