在 Swift 中替代 pthread_mutex_lock?

Alternative to pthread_mutex_lock in Swift?

我正在尝试将单例保存到字典中并用这样的互斥锁锁定字典:

return cached[key] as? T ?? {
    let object = SomeObject()
    pthread_mutex_lock(&mutex)
    cached[key] = object
    pthread_mutex_unlock(&mutex)
    return object
}()

是否有 Swifty 或更好的方法来做到这一点?

您可以像这样使用等效的 NSLock 而不是互斥锁,

let lock = NSLock()
lock.lock()
cached[key] = object
lock.unlock()

但最快捷的方法是使用 GCD DispatchQueue,

private let serialiserQueue = DispatchQueue(label: "queue.name")
serialiserQueue.sync {
    cached[key] = object
}

还有其他可用的选项,如 NSRecursiveLock、OperationQueue(类似于 DispatchQueue),您可以查看它们并做出决定。