构造线程快速安全吗

时间:2018-12-03 12:09:20

标签: arrays swift

let queue1 = DispatchQueue(label: "queue1")
let queue2 = DispatchQueue(label: "queue2")

var list: [Int] = []
public func changeList() {
    queue1.async {
        while true {
            if self.list.count < 10 {
                self.list.append(self.list.count)
            } else {
                self.list.removeAll()
            }
        }
    }

    queue2.async {
        while true {
            // case 1
            // self.list.forEach { debugPrint($0) }

            // case 2
            let value = self.list
            value.forEach { debugPrint($0) }

            // case 3
            // var value = self.list
            //value.append(100)
        }
    } 
}

我创建两个队列来处理不同线程中的数组。在一个线程中,我写了数组,在另一个线程中,我读了数组。但是为什么在情况1,情况2和情况3下会崩溃?这是否意味着结构不是线程安全的。 我在情况2中制作了let value = self.list,但它也崩溃了,为什么?

0 个答案:

没有答案