有没有清晰的示例显示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)

10-08 12:27