在 setter - getter 中同步 class 属性 是否会影响线程安全性?

Does synchronising a class property in setter - getter for thread safety impact performance?

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

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

在 Swift 中,您可以使用带有 .barrier 标志的 DispatchQueue 来实现 readers-writer lock:

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
            }
        }
    }
}

另一方面,同步是正确处理对同一 "resource".

的并发访问的唯一方法