【问题标题】:Why swift dictionary crashed on concurrency?为什么 swift 字典在并发时崩溃?
【发布时间】:2023-02-16 01:21:56
【问题描述】:

这是示例代码:

var dict = [Int: Int]()
for i in 0...100 {
    DispatchQueue.global().async {
        dict[i] = i
    }
}

我知道快速收集不是线程安全的。但是让我感到困惑的是它为什么会崩溃。键和值是一个Int,它是值类型。

Xcode Crash Info

【问题讨论】:

  • I know swift collection is not thread safe <- 这个。
  • 我猜 .global() 是并发队列。这意味着两个或多个操作同时改变dict
  • 那么,为什么并发写入会导致崩溃呢?记忆中发生了什么?

标签: swift thread-safety


【解决方案1】:

Swift 中的集合不是线程安全的。

它正在崩溃,因为 .global() 是一个并发队列,这意味着多个操作正在同时改变 dict

让一个线程修改字典而另一个线程正在读取或写入字典是不安全的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-16
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多