Sobes.tech
Junior — Middle

Můžete vysvětlit koncept mechanismu čtenářů-a pisatelů a jeho použití?

sobes.tech AI

Odpověď od AI

Mechanismus čtenářů-zapisovačů je koncept synchronizace přístupu ke sdílenému zdroji, kdy několik vláken může současně číst data, ale zápis musí být výlučný.

Hlavní myšlenka:

  • Několik čtenářů může současně získat přístup ke zdroji bez blokování, protože čtení nemění stav.
  • Zápis vyžaduje výlučný přístup, aby se předešlo konfliktům a zajistila integrita dat.

Použití v iOS může být například při práci se sdílenými daty nebo cache, kde je důležité povolit více paralelních čtení, ale blokovat přístup při zápisu, aby se zabránilo závodním podmínkám a poškození dat.

Příklad v Swift s využitím DispatchQueues:

let concurrentQueue = DispatchQueue(label: "com.example.readersWriters", attributes: .concurrent)
var sharedResource = [String]()

func readData() {
    concurrentQueue.sync {
        print("Čtení dat: \(sharedResource)")
    }
}

func writeData(newValue: String) {
    concurrentQueue.async(flags: .barrier) {
        sharedResource.append(newValue)
        print("Data zapsána: \(newValue)")
    }
}

Zde čtení probíhá paralelně, zatímco zápis s příznakem .barrier blokuje frontu, čímž zajišťuje výlučný přístup.