• 老杨
    2019-11-29
    请问为什么我按照视频来写的代码,最后运行结果还是有很多-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())
        }
    }
    展开

    作者回复: 是正常的,这个示例多线程运行每一次结果都不一样,依赖你的硬件、当时系统状态等等

    
    
我们在线,来聊聊吧