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