IOS NSLocking协议,NSLock,NSConditionLock,NSRecursiveLock,NSCondition

本文介绍了iOS多线程开发中的锁机制,包括NSLocking协议及其四个实现类:NSLock、NSConditionLock、NSRecursiveLock和NSCondition。详细讲解了各种锁的工作原理和使用场景,通过代码示例展示了如何在不同情况下使用这些锁来确保线程安全。同时提到了分布式锁NSDistributedLock在多进程互斥中的应用。
摘要由CSDN通过智能技术生成

NSLocking 有两个方法

// 上锁
- (void)lock;
// 解锁
- (void)unlock;

实现协议的对象都具有 上锁和解锁功能,NSLock,NSConditionLock,NSRecursiveLock,NSCondition
NSLock
在多线程开发的环境下,多个线程运作的时候NSLock 就会显得特别重要!
NSLock 就是锁定,解锁。

    NSLock * lock = [[NSLock alloc]init];
    NSMutableArray * piaos = [NSMutableArray arrayWithArray:@[@"1",@"2",@"3"]];
    // 线程1
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            [lock lock];
            NSString * st = piaos[0];
            NSLog(@"++%@",st);
            sleep(3);
            [piaos removeObject:@"1"];
            [lock unlock];
        });
    // 线程2
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            NSLog(@"xxoo");
        });
   // 线程3
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            [lock lock];
            NSLog(@"%@",piaos);
            [lock unlock];
        });

上面有3个线程 其中有两个线程加锁。一个没加锁,运行以后你会发现

2015-12-25 17:21:01.770 Nsthirth[3385:2053566] ++1
2015-12-25 17:21:01.770 Nsthirth[3385:2053468] xxoo
2015-12-25 17:21:04.771 Nsthirth[3385:2053471] (
    2,
    3
)

线程2 开线程以后就开始跑了6666,线程1 和3 加了锁 线程1先一步锁定,线程3就需要等待3S 才执行
这里要说点小主意NSLock 加锁的时紧跟着lock 后免得语句

di
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值