如何演示阵列上的竞争条件

时间:2017-02-27 04:35:51

标签: arrays swift swift3 thread-safety

是否有一个明确的示例显示多线程场景中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
    }
}

有没有更好的例子来说明数组中的线程问题?

1 个答案:

答案 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)