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

时间:2017-08-14 00:57:34

标签: swift swift3

我非常确定从多个线程修改一个Swift Dictionary是不安全的,但是访问它是否安全?我正在使用pthread_rwlock创建一个锁,允许单个编写者和多个读者保护Dictionary。到目前为止我没有遇到任何问题,但我也无法找到任何信息,这是否安全。

这就是我所说的“访问”字典:

let value = dictionary[key]

这就是“修改”字典的意思:

dictionary[key] = value

1 个答案:

答案 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)