用途:当 Actor 过重或过慢时,为性能关键路径提供底层线程安全同步方案,并给出 Mutex 与 Actor 的取舍依据。
主要能力:覆盖 Mutex(iOS 18+ / Swift 6,泛型保护值、Sendable、仅闭包访问)、OSAllocatedUnfairLock(iOS 16+,堆分配地址稳定、非递归、Sendable)、Atomic 类型(iOS 18+,支持 wrappingAdd、compareExchange 等原子操作),并给出线程安全计数器、Sendable 包装、Actor 内快速同步读取、无锁计数器、iOS 16 回退等模式。
用法要点:Mutex 通过 withLock 读写,可用 withLockIfAvailable 非阻塞尝试;OSAllocatedUnfairLock 推荐闭包式 withLock,也可 lock()/unlock()(仅限同线程);Atomic 使用 load、wrappingAdd、compareExchange 并指定内存序。内存序默认建议:计数器用 .relaxed,读改写用 .acquiringAndReleasing。
限制与风险:绝不可在持锁时 await,否则可能死锁;信号量与读写锁会阻塞协作线程池,应改用 async continuation;不要直接使用 os_unfair_lock(内存可能移动,属未定义行为);OSAllocatedUnfairLock 非递归,嵌套加锁会死锁;不要混用 lock/unlock 与 withLock。需要挂起点或跨 await 访问时应改用 Actor。
适用场景:微秒级操作、保护单个属性、跨模块共享、高频计数等性能热点。
其他:官方文档与 Swift Evolution SE-0433 等资源已列出;具体平台版本与 API 细节以资料所述为准,未提及的收费、价格等信息暂未提供。