从多个线程访问(而不是修改)Swift 字典是否安全?



我很确定从多个线程修改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)

最新更新