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

举报
Serendipity·y 发表于 2022/02/16 23:51:56 2022/02/16
【摘要】 一、OSSpinLock(自旋锁) 自从 OSSpinLock 出现安全问题,在 iOS10 之后就被 Apple 废弃。自旋锁之所以不安全,是因为获取锁后,线程会一直处于忙等待,造成了任务的优先级...

一、OSSpinLock(自旋锁)

  • 自从 OSSpinLock 出现安全问题,在 iOS10 之后就被 Apple 废弃。自旋锁之所以不安全,是因为获取锁后,线程会一直处于忙等待,造成了任务的优先级反转;
  • 其中的忙等待机制可能会造成高优先级任务一直 running 等待,占用时间片,而低优先级的任务无法抢占时间片,会造成一直不能完成,锁未释放的情况;
  • 在 OSSpinLock 被弃用后,其替代方案是内部封装 os_unfair_lock,而 os_unfair_lock 在加锁时会处于休眠状态,而不是自旋锁的忙等待状态。

二、atomic(原子锁)

  • atomic 适用于 OC 中属性的修饰符,其自带一把自旋锁,但是一般基本不使用,都是使用的 nonatomic;
  • setter 方法会根据修饰符调用不同方法,其中最后会统一调用 reallySetProperty 方法,其中就有 atomic 和非 atomic 的操作;
	static inline void reallySetProperty(id self
  
 

    文章来源: blog.csdn.net,作者:Serendipity·y,版权归原作者所有,如需转载,请联系作者。

    原文链接:blog.csdn.net/Forever_wj/article/details/116620682

    【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
    • 点赞
    • 收藏
    • 关注作者

    评论(0

    0/1000
    抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。