Синхронизация всегда будет влиять на производительность, но степень влияния целиком зависит от конкретного случая - например, как часто вызывается установщик по сравнению с получателем, как быстро вызывается установщик по сравнению с получателем и т. Д..
В Swift вы можете использовать DispatchQueue
с флагом .barrier
для реализации блокировки чтения-записи :
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
}
}
}
}
С другой сторонысинхронизация - единственный способ правильно обрабатывать одновременный доступ к одному и тому же «ресурсу».