我被要求在 swift 中实现一个线程安全的字典,我使用了常见的方法:
class MutableDictionary {
var dictionary: [String : Any] = [:]
var queue = DispatchQueue(label: "queue", attributes: .concurrent)
func object(for key: String) -> Any? {
queue.sync {
return dictionary[key]
}
}
func set(_ object: Any?, for key: String) {
queue.async(flags: .barrier) {
self.dictionary[key] = object
}
}
}
但是,接下来的问题是:
最佳答案
但是,serialQueue 一次只能执行一项任务。
2、假设你只用队列来读/写,显然它们的效果是一样的。如果你将另一种任务交给它,显然并发队列的成本更低,这才是真正的区别。
3、提交给async对象的地址会在你的对象是类的时候定义。当你给类成员一个新值时,你将有一个错误的地址,所以你无法访问它并且错误来了。 您可以通过结构尝试 .
4、引用答案1
。
5、有时候希望任务执行得更快,concurrentQueue优先。如果你想有序地执行任务,serialQueue 做的更好。
关于ios - 什么时候在 ios 中选择 serialQueue 而不是并发队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71850309/