Sobes.tech
Junior — Middle

Jakie metody synchronizacji są używane do zapewnienia wspólnego dostępu do zmiennej podczas odczytu i zapisu?

sobes.tech AI

Odpowiedź od AI

Aby zapewnić bezpieczny współdzielony dostęp do zmiennej podczas odczytu i zapisu na iOS, często stosuje się następujące metody synchronizacji:

  • Kolejki dispatch (GCD): kolejki sekwencyjne (DispatchQueue) pozwalają wykonywać operacje kolejno, zapobiegając wyścigom danych. Na przykład można użyć DispatchQueue.sync lub DispatchQueue.async z kolejką sekwencyjną.

  • NSLock i inne obiekty blokujące: NSLock, NSRecursiveLock, NSCondition pozwalają jawnie blokować dostęp do zasobu.

  • @synchronized (w Objective-C): konstrukcja składniowa do blokowania kodu.

  • Właściwości atomowe: w Objective-C można deklarować właściwości jako atomic, ale nie zawsze jest to wystarczające dla złożonych operacji.

  • Blokady czytelnika-pisarza: na przykład pthread_rwlock_t do rozdzielenia dostępu na odczyt i zapis.

Przykład użycia DispatchQueue do synchronizacji dostępu do zmiennej:

class ThreadSafeCounter {
    private var value = 0
    private let queue = DispatchQueue(label: "com.example.counterQueue")

    func increment() {
        queue.sync {
            value += 1
        }
    }

    func getValue() -> Int {
        return queue.sync { value }
    }
}