Влияет ли синхронизация свойства класса в сеттере - геттере для безопасности потока на производительность? - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть условие гонки в собственности класса.Один поток читает это, другой пишет.Теперь я пришел к решению, чтобы синхронизировать метод получения и установки этого свойства.Вопрос в том, повлияет ли это на производительность приложения?Если да, есть ли другое решение, кроме синхронизации свойства?

1 Ответ

0 голосов
/ 05 марта 2019

Синхронизация всегда будет влиять на производительность, но степень влияния целиком зависит от конкретного случая - например, как часто вызывается установщик по сравнению с получателем, как быстро вызывается установщик по сравнению с получателем и т. Д..

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

С другой сторонысинхронизация - единственный способ правильно обрабатывать одновременный доступ к одному и тому же «ресурсу».

...