iOS之深入解析“锁”的底层原理

本文深入探讨了iOS中的锁机制,包括OSSpinLock的安全问题及其被os_unfair_lock替代,atomic修饰符的原子性操作,以及synchronized的递归互斥锁实现。同时分析了@synchronized的底层流程,如objc_sync_enter和objc_sync_exit,以及NSLock、NSRecursiveLock和NSConditionLock的工作原理。文章揭示了锁在多线程环境中的重要性和使用注意事项,强调了性能和安全性的平衡。
摘要由CSDN通过智能技术生成
一、OSSpinLock(自旋锁)
  • 自从 OSSpinLock 出现安全问题,在 iOS10 之后就被 Apple 废弃。自旋锁之所以不安全,是因为获取锁后,线程会一直处于忙等待,造成了任务的优先级反转;
  • 其中的忙等待机制可能会造成高优先级任务一直 running 等待,占用时间片,而低优先级的任务无法抢占时间片,会造成一直不能完成,锁未释放的情况;
  • 在 OSSpinLock 被弃用后,其替代方案是内部封装 os_unfair_lock,而 os_unfair_lock 在加锁时会处于休眠状态,而不是自旋锁的忙等待状态。
二、atomic(原子锁)
  • atomic 适用于 OC 中属性的修饰符,其自带一把自旋锁,但是一般基本不使用,都是使用的 nonatomic;
  • setter 方法会根据修饰符调用不同方法,其中最后会统一调用 reallySetProperty 方法,其中就有 atomic 和非 atomic 的操作;
	static 
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

╰つ栺尖篴夢ゞ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值