我很确定从多个线程修改SwiftDictionary
是不安全的,但是访问一个线程安全吗?我正在使用pthread_rwlock
创建一个锁,允许单个写入器和多个读取器保护Dictionary
。到目前为止,我没有遇到任何问题,但我也无法找到任何信息,例如这样做是否安全。
以下是我所说的"访问"字典的意思:
let value = dictionary[key]
以下是我所说的"修改"字典的意思:
dictionary[key] = value
首先,我希望你知道你正在使用pthread_rwlock
做什么。 但总的来说,你不应该考虑线程,而应该考虑你通常会使用的更高级别的抽象。您应该考虑Apple通过GCD提供的队列。
现在一般来说,如果我们只是谈论同时阅读Collection
,你应该没问题。您可能会遇到问题的写作。
话虽如此,我无法从Apple找到有关此的任何资源,但是以下代码不会对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)