多线程对同一数据源操作时使用 线程锁 NSCondition NSLock

本文详细介绍了NSCondition和NSLock在多线程环境中的使用方法。NSCondition用于实现线程间的同步,通过wait和signal操作来控制线程的状态;NSLock则用于锁定资源,确保在同一时刻只有一个线程能访问特定的资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NSConditon 

       作为一个锁和一个线程检查器:锁主要为了当检测条件时保护数据源,执行条件引发的任务;线程检查器主要是根据条件决定是否继续运行线程,即线程是否被阻塞

      NSConditon *condition =[ [NSCondition alloc]]init;

[condition lock];//锁住当前线程 其他线程的命令需要在lock 外等待,只到unlock ,才可访问

[condition unlock];//解锁当前线程

[condition wait];//让当前线程处于等待状态

[condition signal];//CPU发信号告诉其他线程不用等待,可以继续执行

    dispatch_async(dispatch_queue_create("queue", 0), ^{

        [condition lock];

        if(ind<index){

            [condition wait];

        }

        index = ind;

        [condition unlock];

        [condition signal];

    });



NSLock

某个线程A调用lock方法。这样,NSLock将被上锁。可以执行“关键部分”,完成后,调用unlock方法。如果,在线程A 调用unlock方法之前,另一个线程B调用了同一锁对象的lock方法。那么,线程B只有等待。直到线程A调用了unlock。

NSLock *lock = [[NSLock allocinit];

        [lock lock];

        [obj method2];

        [lock unlock];



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值