是否有一个明确的示例显示多线程场景中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
}
}
有没有更好的例子来说明数组中的线程问题?
答案 0 :(得分:0)
您的代码只有一个争用点。尝试这样的事情:
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)