【发布时间】:2021-04-22 01:57:36
【问题描述】:
我想同时设置数组的元素,所以我写代码来测试:
let Count = 1000
let SubRangeCount = 100
var ary = [Int](repeating: 0, count: Count)
let times = Count/SubRangeCount
let _ = DispatchQueue.global(qos: .userInitiated)
DispatchQueue.concurrentPerform(iterations: times){ idx in
for i in (idx * SubRangeCount)..<((idx+1) * SubRangeCount) {
ary[i] = Int.random(in: 0...Int.max)
}
}
}
以上代码运行良好! 但是当我这样改变时:
let Count = 10000
let SubRangeCount = 1000
这是崩溃! 在操场上它抱怨“致命错误:UnsafeMutablePointer.initialize 重叠范围:文件 Swift/UnsafePointer.swift,第 832 行”
但是您可以看到数组的每个分配范围都没有重叠!
那么如何解决呢?谢谢!
【问题讨论】:
-
即使是 1000 和 100,代码有时也会中断。
-
是的!!!有时也会崩溃!
-
Swift 不提供线程安全:forums.swift.org/t/…
-
实际上我很惊讶没有明确的“独占访问”错误。
-
"我想同时设置数组的元素" 你不能。这是对结构及其成员的同时访问,是被禁止的。
标签: arrays swift concurrency crash