import Foundation extension UnsafeMutablePointer { @inlinable @discardableResult func sync(_ work: () -> R) -> R { os_unfair_lock_lock(self) defer { os_unfair_lock_unlock(self) } return work() } func lock() { os_unfair_lock_lock(self) } func unlock() { os_unfair_lock_unlock(self) } } extension NSRecursiveLock { @inlinable @discardableResult @_spi(Internals) public func sync(work: () -> R) -> R { self.lock() defer { self.unlock() } return work() } }