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
,但它也崩溃了,为什么?