老杨
请问为什么我按照视频来写的代码,最后运行结果还是有很多-1呢?我的代码如下:
let queue = DispatchQueue(label: "myQueue", qos: DispatchQoS.default, attributes: DispatchQueue.Attributes.concurrent, autoreleaseFrequency: DispatchQueue.AutoreleaseFrequency.inherit, target: nil)
let queue2 = DispatchQueue(label: "myQueue2", qos: DispatchQoS.default, attributes: DispatchQueue.Attributes.concurrent, autoreleaseFrequency: DispatchQueue.AutoreleaseFrequency.inherit, target: nil)
let arrayQueue = DispatchQueue(label: "myQueue3", qos: DispatchQoS.default, attributes: DispatchQueue.Attributes.concurrent, autoreleaseFrequency: DispatchQueue.AutoreleaseFrequency.inherit, target: nil)
var array = Array(1...1000)
func getLastItem() -> Int {
return arrayQueue.sync { () -> Int in
if array.count > 0 {
return array[array.count - 1]
}
return -1
}
}
func removeLastItem() {
let workItem = DispatchWorkItem(qos: DispatchQoS.default, flags: DispatchWorkItemFlags.barrier) {
array.removeLast()
}
arrayQueue.async(execute: workItem)
}
queue.async {
for _ in 0..<1000 {
removeLastItem()
}
}
queue2.async {
for _ in 0..<1000 {
print(getLastItem())
}
}
作者回复: 是正常的,这个示例多线程运行每一次结果都不一样,依赖你的硬件、当时系统状态等等