这样的代码:
for _ in 0...3 {
DispatchQueue.global().async {
for i in 0 ... 30000 {
self.aString = "\(i)"
}
}
}
运行此代码时,它将崩溃:
malloc:对象0x6100000569de的***错误:无效的指针出队 从空闲列表中
如果我在线程中添加锁,它可以正常工作,就像串行队列一样:
for _ in 0...3 {
DispatchQueue.global().async {
self.lock.lock() // NSRecursiveLock
for i in 0 ... 30000 {
self.aString = "\(i)"
}
self.lock.unlock()
}
}
我认为,在不同线程中修改相同数据可能会导致数据不正确,但是为什么会崩溃?
答案 0 :(得分:0)
使用主队列代替使用全局队列,它不会崩溃。
for _ in 0...3 {
DispatchQueue.main.async {
for i in 0 ... 30000 {
self.aString = "\(i)"
}
}
}
完全不知道为什么会首先发生,但是使用主队列可以解决它。