iOS 锁的总结

//互斥锁
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相关操作,必须放在主线程执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值