swift 线程安全访问数组的开始。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift 线程安全访问数组的开始。相关的知识,希望对你有一定的参考价值。

struct SafeArray<Element> {

    private let multiReaderQueue: DispatchQueue
    private var array = [Element]()

    init() {
        multiReaderQueue = DispatchQueue(label: "safeArray.internal", attributes: .concurrent)
    }

    var count: Int { return read { self.array.count } }
    var last: Element? { return read { self.array.last } }

    mutating func append(_ element: Element) {
        write { self.array.append(element) }
    }

    private func read<T>(execute block: () -> T) -> T {
        return multiReaderQueue.sync(execute: block)
    }

    private func write<T>(execute block: () -> T) -> T {
        return multiReaderQueue.sync(flags: .barrier, execute: block)
    }

}

以上是关于swift 线程安全访问数组的开始。的主要内容,如果未能解决你的问题,请参考以下文章

Swift COW 线程安全

Swift - 分派到主队列是不是足以使 var 线程安全?

swift实现线程安全的栈和队列

将 Swift 调用同步到基于 C 的线程不安全库

java中的线程安全随机访问循环数组?

如何提供对大型数组元素的线程安全访问