在 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),您可以查看它们并做出决定。
我正在尝试将单例保存到字典中并用这样的互斥锁锁定字典:
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),您可以查看它们并做出决定。