我非常确定从多个线程修改一个Swift Dictionary
是不安全的,但是访问它是否安全?我正在使用pthread_rwlock
创建一个锁,允许单个编写者和多个读者保护Dictionary
。到目前为止我没有遇到任何问题,但我也无法找到任何信息,这是否安全。
这就是我所说的“访问”字典:
let value = dictionary[key]
这就是“修改”字典的意思:
dictionary[key] = value
答案 0 :(得分:1)
对于初学者来说,我希望您知道使用pthread_rwlock
的过程。
但是总的来说,您不应该考虑线程,而应该考虑通常使用的更高层次的抽象。您应该考虑Apple通过GCD提供的队列。
现在,通常来说,如果我们仅谈论同时从Collection
读 ,那应该没问题。撰写本文时可能遇到问题。
话虽这么说,我找不到苹果提供的任何资源,但是下面的代码不会对Xcode中的线程清理程序造成任何问题,但是如果您将读取更改为写入,则会出现此问题。
var dict = Dictionary<Int, String>()
(0..<100).forEach {
dict[$0] = $0.description
}
let waiter = DispatchGroup()
DispatchQueue.concurrentPerform(iterations: 100) {
waiter.enter()
let _ = dict[$0]
waiter.leave()
}
waiter.wait()
print(dict)