我在类属性中有比赛条件。一个线程正在读取,另一个线程正在写入。现在,我想出了一个解决方案,用于同步该属性的getter和setter。问题是,这会影响应用程序的性能吗?如果是,除了同步属性外,还有其他解决方法吗?
答案 0 :(得分:0)
同步总是会对性能产生影响,但是影响的多少完全取决于具体情况-例如与getter相比,setter调用的频率是多少,与getter相比,setter调用的速度如何,等等。
在Swift中,您可以使用带有DispatchQueue
标志的.barrier
来实现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
}
}
}
}
另一方面,同步是正确处理对同一“资源”的并发访问的唯一方法。