美文网首页
GCD 实例用法

GCD 实例用法

作者: zh_19 | 来源:发表于2018-12-03 19:28 被阅读0次

    读写锁

    读写锁的特点:

    1. 可以多方同时读
    2. 写是互斥的
    3. 新读取的东西必须是写后的

    我们可以利用queue中barrier的特性


    image.png

    图片来源 grand-central-dispatch-tutorial-for-swift-4-part-1-2

    由上图所示 当concurrent队列里有BarrierTask时,此时队列就像serial队列一样,只有当BarrierTask执行结束后,队列才会恢复正常

    代码如下

    class RWLock {
        private var concurrentQueue: DispatchQueue
        
        init(qos: DispatchQoS = .default) {
            concurrentQueue = DispatchQueue(label: "com.RWLock.label", qos: qos, attributes: .concurrent)
        }
        
        func read<T>(execute work: @escaping () -> T) -> T {
            var t: T!
            concurrentQueue.sync {
                t = work()
            }
            return t
        }
        
        func write(execute work: @escaping () -> Void) {
            concurrentQueue.async(flags: .barrier) {
                work()
            }
        }
    }
    

    Concurrency Looping

    并发执行这个loop, 是同步调用并且所有工作都完成才会返回。

    DispatchWorkItem

    相关文章

      网友评论

          本文标题:GCD 实例用法

          本文链接:https://www.haomeiwen.com/subject/asefcqtx.html