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

一、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/Forever_wj/article/details/116620682