os_unfair_lock 的理解与使用

前言

在多线程环境下,为了保证数据一致性和线程安全,我们经常需要对共享资源进行加锁。Apple 在 iOS 10.0 之后引入了 os_unfair_lock,它在性能和公平性上相较于传统的 OSSpinLock 有显著提升。本篇博客将带你深入了解 os_unfair_lock 的原理、使用方法、性能对比以及最佳实践。


一、锁的演进

1.1 OSSpinLock 的不足

  • 自旋等待:线程会在内核态和用户态之间频繁切换,浪费 CPU。
  • 优先级反转:当高优先级线程等待低优先级线程释放锁时,会出现长时间阻塞。

1.2 引入 os_unfair_lock

为了解决上述问题,Apple 在 libplatform 中提供了 os_unfair_lock

  • 阻塞等待:当锁被占用时,线程会进入内核等待,而不是一直自旋。
  • 避免优先级反转:内核会动态调整唤醒顺序,减少高优先级线程饥饿风险。

二、os_unfair_lock 原理

os_unfair_lock 本质是基于内核的排他锁(mutex),可确保:

  1. 性能

你可能感兴趣的:(iOS,Multithreading,SQI,iOS,os_unfair_lock,Multithreading)