0

我在类属性中有竞争条件。一个线程正在读取它,另一个线程正在写入。现在我想出了一个解决方案来同步该属性的 getter 和 setter。问题是这会影响应用程序的性能吗?如果是,除了同步属性还有其他解决方案吗?

4

1 回答 1

0

同步总是会对性能产生影响,但影响的大小完全取决于具体情况——例如,setter 与 getter 相比的调用频率,setter 调用与 getter 相比的速度等。

在 Swift 中,您可以使用DispatchQueue带有.barrier标志的 a 来实现读写锁

class MyClass {
    private static let queue = DispatchQueue(
        label: "synchronisation",
        qos: .userInitiated, // use QoS that match your current use-case
        attributes: [.concurrent]
    )
    private static var _field = ""
    public static var field: String {
        get {
            return queue.sync {
                return self._field
            }
        }
        set {
            return queue.sync(flags: .barrier) {
                self._field = newValue
            }
        }
    }
}

另一方面,同步是正确处理对同一“资源”的并发访问的唯一方法。

于 2019-03-05T09:57:11.697 回答