Swift中的集合不是线程安全的。
下面是示例代码:
var dict = [Int: Int]()
for i in 0...100 {
DispatchQueue.global().async {
dict[i] = i
}
}
我知道快速收集是不安全的。但让我困惑的是它为什么会坠毁。键和值是值类型的Int
。
Xcode崩溃信息
它崩溃是因为.global()
是一个并发队列,这意味着多个操作同时更改dict
。
让一个线程在另一个线程读写字典时修改字典是不安全的