有没有清晰的示例显示Array
在多线程情况下失败?我尝试了下面的代码,但似乎没有演示非托管方案中存在的多线程问题。
var unsafeArray = [Int]()
func unsafeMutate() {
DispatchQueue.concurrentPerform(iterations: 1000) { index in
if unsafeArray.count < 100 {
unsafeArray.append(1)
}
print("\(unsafeArray.count)") //Should not be over 100
}
}
有没有更好的示例来说明数组中的线程问题?
最佳答案
您的代码只有一个竞争点。尝试这样的事情:
import Dispatch
var unsafeArray = [Int]()
func unsafeMutate() {
DispatchQueue.concurrentPerform(iterations: 1000) { index in
let last = unsafeArray.last ?? 0
unsafeArray.append(last + 1)
}
}
unsafeMutate()
print(unsafeArray)