iOS 锁的总结

本文详细介绍了三种常用的多线程同步机制:互斥锁、条件锁和原子锁。通过具体的代码示例展示了如何使用这些同步机制来保护共享资源,避免竞态条件,并确保线程间的正确同步。

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

//互斥锁
NSLock *_lock;
_lock = [[NSLock alloc] init];

while (1)
{
    [_lock lock];
    
    //相关操作...
    
    [_lock unlock];
}


//条件锁 
NSCondition *_condition;
_condition = [[NSCondition alloc] init];

- (void)doSomethingA
{
    [_condition lock];
    
    //...相关操作...
    
    // A执行完毕 发送signal
    [_condition signal];
    [_condition unlock];
}

- (void)doSomethingB
{
    [_condition lock];
    //...相关操作
    // 线程等待 一直等到某一个线程发送信号 signal, wait放在相关操作的后面,此处比较特殊
    [_condition wait];
    [_condition unlock];
}

//原子锁
@property (atomic, assign) NSInteger totalCount;

//synchronized
@synchronized(self) {
    if (self.totalCount > 0) {
        self.totalCount--;
    } else {
        break;
    }
}


1.为了保证性能,atomic仅针对属性的setter方法做了保护
2.共享资源时,如果涉及到属性的getter方法,可以使用互斥锁@synchronized可以保证属性在多个线程之间的读写都是安全的
3.无论是atomic还是@synchronized,使用的代价都是高昂
4.更新UI相关操作,必须放在主线程执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值